/**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
/**** 
* Classes
****/ 
// Arkadan kovalayan düşman araba
var ChaserCar = Container.expand(function () {
	var self = Container.call(this);
	var car = self.attachAsset('chaserCar', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = car.width;
	self.height = car.height;
	self.speed = 12; // Başlangıç hızı
	self.targetY = 0; // Hedef y (player'ın arkasında başlar)
	self.update = function () {
		// Oyuncuya yaklaş
		if (self.y < self.targetY) {
			self.y += self.speed;
			if (self.y > self.targetY) self.y = self.targetY;
		}
	};
	return self;
});
// Düz ve ters giden engel arabalar
var EnemyCar = Container.expand(function () {
	var self = Container.call(this);
	// Farklı tipte araba şekilleri ve renkleri
	var carTypes = [{
		asset: 'enemyCar',
		shape: 'box'
	}, {
		asset: 'enemyCarRed',
		shape: 'box'
	}, {
		asset: 'enemyCarBlue',
		shape: 'box'
	}, {
		asset: 'enemyCarYellow',
		shape: 'box'
	}, {
		asset: 'enemyCarGreen',
		shape: 'ellipse'
	}, {
		asset: 'enemyCarPurple',
		shape: 'box'
	}, {
		asset: 'enemyCar',
		shape: 'ellipse'
	}, {
		asset: 'enemyCarRed',
		shape: 'ellipse'
	}, {
		asset: 'enemyCarBlue',
		shape: 'ellipse'
	}, {
		asset: 'enemyCarYellow',
		shape: 'ellipse'
	}, {
		asset: 'enemyCarGreen',
		shape: 'box'
	}, {
		asset: 'enemyCarPurple',
		shape: 'ellipse'
	}, {
		asset: 'enemyCar',
		shape: 'box'
	}, {
		asset: 'enemyCarRed',
		shape: 'box'
	}, {
		asset: 'enemyCarBlue',
		shape: 'box'
	}, {
		asset: 'enemyCarYellow',
		shape: 'box'
	},
	// 10 yeni çeşit
	{
		asset: 'enemyCarOrange',
		shape: 'box'
	}, {
		asset: 'enemyCarPink',
		shape: 'ellipse'
	}, {
		asset: 'enemyCarCyan',
		shape: 'box'
	}, {
		asset: 'enemyCarBlack',
		shape: 'ellipse'
	}, {
		asset: 'enemyCarWhite',
		shape: 'box'
	}, {
		asset: 'enemyCarBrown',
		shape: 'ellipse'
	}, {
		asset: 'enemyCarSilver',
		shape: 'box'
	}, {
		asset: 'enemyCarGold',
		shape: 'ellipse'
	}, {
		asset: 'enemyCarNavy',
		shape: 'box'
	}, {
		asset: 'enemyCarLime',
		shape: 'ellipse'
	},
	// 3 yeni çeşit (arttırıldı)
	{
		asset: 'enemyCarBlack',
		shape: 'box'
	}, {
		asset: 'enemyCarCyan',
		shape: 'ellipse'
	}, {
		asset: 'enemyCarBrown',
		shape: 'box'
	}];
	// If selectedEnemyCarAssets is set, filter carTypes
	if (typeof selectedEnemyCarAssets !== 'undefined' && selectedEnemyCarAssets && selectedEnemyCarAssets.length > 0) {
		var filtered = [];
		for (var i = 0; i < carTypes.length; i++) {
			if (selectedEnemyCarAssets.indexOf(carTypes[i].asset) !== -1) {
				filtered.push(carTypes[i]);
			}
		}
		if (filtered.length > 0) carTypes = filtered;
	}
	// Rastgele bir tip seç
	var typeIdx = Math.floor(Math.random() * carTypes.length);
	var carType = carTypes[typeIdx];
	var car = self.attachAsset(carType.asset, {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = car.width;
	self.height = car.height;
	self.speed = 18; // Varsayılan hız (aşağı)
	self.direction = 1; // 1: aşağı, -1: yukarı (ters)
	self.update = function () {
		self.y += self.speed * self.direction;
	};
	return self;
});
// Benzin bidonu (yolda çıkan, toplanınca yakıt artırır)
var FuelCan = Container.expand(function () {
	var self = Container.call(this);
	// Benzin bidonu için görsel asset kullan
	var can = self.attachAsset('fuelCan', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = can.width;
	self.height = can.height;
	self.speed = 24;
	self.lane = 1;
	self.update = function () {
		self.y += self.speed;
	};
	return self;
});
// Nitro power-up
var Nitro = Container.expand(function () {
	var self = Container.call(this);
	var nitro = self.attachAsset('nitro', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = nitro.width;
	self.height = nitro.height;
	self.speed = 24;
	self.lane = 1;
	self.update = function () {
		self.y += self.speed;
	};
	return self;
});
// Oyuncu arabası
var PlayerCar = Container.expand(function () {
	var self = Container.call(this);
	// Use selectedPlayerCarAsset if set, fallback to 'playerCar'
	var asset = typeof selectedPlayerCarAsset !== 'undefined' && selectedPlayerCarAsset ? selectedPlayerCarAsset : 'playerCar';
	var car = self.attachAsset(asset, {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = car.width;
	self.height = car.height;
	return self;
});
// Yol çizgisi (hareketli)
var RoadLine = Container.expand(function () {
	var self = Container.call(this);
	var line = self.attachAsset('roadLine', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = line.width;
	self.height = line.height;
	self.speed = 24;
	self.update = function () {
		self.y += self.speed;
	};
	return self;
});
// Yan ağaçlar (sol ve sağ)
var TreeLeft = Container.expand(function () {
	var self = Container.call(this);
	var tree = self.attachAsset('treeLeft', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = tree.width;
	self.height = tree.height;
	self.speed = 24;
	self.update = function () {
		self.y += self.speed;
	};
	return self;
});
var TreeRight = Container.expand(function () {
	var self = Container.call(this);
	var tree = self.attachAsset('treeRight', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = tree.width;
	self.height = tree.height;
	self.speed = 24;
	self.update = function () {
		self.y += self.speed;
	};
	return self;
});
// Tree bottom zone (left)
var TreeZoneLeft = Container.expand(function () {
	var self = Container.call(this);
	var zone = self.attachAsset('treeZoneLeft', {
		anchorX: 0.5,
		anchorY: 0.0
	});
	self.width = zone.width;
	self.height = zone.height;
	self.speed = 24;
	self.update = function () {
		self.y += self.speed;
	};
	return self;
});
// Tree bottom zone (right)
var TreeZoneRight = Container.expand(function () {
	var self = Container.call(this);
	var zone = self.attachAsset('treeZoneRight', {
		anchorX: 0.5,
		anchorY: 0.0
	});
	self.width = zone.width;
	self.height = zone.height;
	self.speed = 24;
	self.update = function () {
		self.y += self.speed;
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x222222
});
/**** 
* Game Code
****/ 
// Nitro asset
// Chasing enemy car asset (arkadan kovalayan düşman)
// Köprü ve arka plan için özelleştirilebilir assetler
// 10 yeni çeşit için ek varlıklar
// Oyun alanı boyutları
// Köprü ve arka planı ekle
// Tree bottom zone assets (customize these IDs as needed)
// Fuel bar yan sembolü
var backgroundImg = LK.getAsset('background', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 2048 / 2,
	y: 2732 / 2
});
game.addChild(backgroundImg);
var bridgeImg = LK.getAsset('bridge', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 2048 / 2,
	y: 2732 / 2
});
game.addChild(bridgeImg);
// Oyuncu arabası (kırmızı kutu)
// Engeller (gri kutu)
// Yol çizgisi (beyaz ince kutu)
// Yan ağaçlar için basit şekil (dilerseniz image ile de değiştirebilirsiniz)
// Play button asset (customizable)
var GAME_WIDTH = 2048;
var GAME_HEIGHT = 2732;
// Yolun genişliği ve şeritler
var ROAD_WIDTH = 1200;
var ROAD_LEFT = (GAME_WIDTH - ROAD_WIDTH) / 2;
var ROAD_RIGHT = ROAD_LEFT + ROAD_WIDTH;
// Şerit sayısı ve pozisyonları
var LANE_COUNT = 4;
var LANE_WIDTH = ROAD_WIDTH / LANE_COUNT;
var LANE_X = [ROAD_LEFT + LANE_WIDTH * 0.5, ROAD_LEFT + LANE_WIDTH * 1.5, ROAD_LEFT + LANE_WIDTH * 2.5, ROAD_LEFT + LANE_WIDTH * 3.5];
// Yol çizgileri
var roadLines = [];
// Yan ağaçlar
var leftTrees = [];
var rightTrees = [];
// Tree bottom zones
var leftTreeZones = [];
var rightTreeZones = [];
function spawnRoadLines() {
	// Her şeridin ortasına, aralıklı çizgiler
	for (var lane = 0; lane < LANE_COUNT; lane++) {
		for (var i = 0; i < 8; i++) {
			var line = new RoadLine();
			line.x = ROAD_LEFT + LANE_WIDTH * (lane + 0.5);
			line.y = i * 400;
			roadLines.push(line);
			game.addChild(line);
		}
	}
	// Sol ve sağ kenara ağaçlar ve altındaki bölgeler
	for (var i = 0; i < 8; i++) {
		var leftTree = new TreeLeft();
		leftTree.x = ROAD_LEFT - 120; // Sol kenarın biraz dışında
		leftTree.y = i * 400;
		leftTrees.push(leftTree);
		game.addChild(leftTree);
		var rightTree = new TreeRight();
		rightTree.x = ROAD_RIGHT + 120; // Sağ kenarın biraz dışında
		rightTree.y = i * 400;
		rightTrees.push(rightTree);
		game.addChild(rightTree);
		// Tree bottom zones
		var leftZone = new TreeZoneLeft();
		leftZone.x = ROAD_LEFT - 120;
		leftZone.y = leftTree.y + leftTree.height / 2; // Ağacın altına hizala
		leftTreeZones.push(leftZone);
		game.addChild(leftZone);
		var rightZone = new TreeZoneRight();
		rightZone.x = ROAD_RIGHT + 120;
		rightZone.y = rightTree.y + rightTree.height / 2;
		rightTreeZones.push(rightZone);
		game.addChild(rightZone);
	}
}
spawnRoadLines();
// Oyuncu arabası
var player = new PlayerCar();
player.lane = 1; // Ortadaki şerit
player.x = LANE_X[player.lane];
player.y = GAME_HEIGHT - 500;
game.addChild(player);
// Arkadan kovalayan düşman araba
var chaserCar = new ChaserCar();
chaserCar.x = player.x;
chaserCar.y = GAME_HEIGHT + 400; // Ekranın dışında başlat
chaserCar.targetY = player.y + 600; // Oyuncunun arkasında başlat
game.addChild(chaserCar);
// Nitro power-up'lar
var nitros = [];
var nitroSpawnTick = 0;
var NITRO_SPAWN_INTERVAL = 180; // 3 saniyede bir
var nitroActive = false;
var nitroTimer = 0;
var NITRO_DURATION = 120; // 2 saniye
var playerSpeedBoost = 0;
// --- FuelCan (yolda benzin) değişkenleri ---
var fuelCans = [];
var fuelCanSpawnTick = 0;
var FUELCAN_SPAWN_INTERVAL = 300; // Her 5 saniyede bir (60fps)
var FUELCAN_AMOUNT = 250; // Toplayınca eklenecek yakıt miktarı
// Engeller
var enemyCars = [];
var ENEMY_SPAWN_INTERVAL_BASE = 60; // Başlangıçta 60 tickte bir (1 sn)
var ENEMY_SPAWN_INTERVAL_MIN = 18; // Minimum 0.3 sn (18 tick)
var enemySpawnTick = 0;
function getEnemySpawnInterval() {
	// Mesafe arttıkça interval azalır, minimuma kadar iner
	// 0-2000 arası 60, 2000'den sonra 30'a kadar iner, 6000'den sonra tekrar 60'a döner (normalleşir)
	if (distance < 2000) return ENEMY_SPAWN_INTERVAL_BASE;
	if (distance < 6000) return Math.max(ENEMY_SPAWN_INTERVAL_BASE - Math.floor((distance - 2000) / 133), 30);
	// 6000 ve sonrası: tekrar normal (60 tick) aralığına döner
	return ENEMY_SPAWN_INTERVAL_BASE;
}
// Skor
var distance = 0;
var scoreTxt = new Text2('0', {
	size: 120,
	fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// --- Fuel Bar Variables and UI ---
var FUEL_MAX = 1000;
var fuel = FUEL_MAX;
// Benzin daha yavaş azalsın
var FUEL_DECREASE_PER_TICK = 0.3; // daha yavaş azalsın
var fuelBarWidth = 600;
var fuelBarHeight = 40;
var fuelBarBg = LK.getAsset('fuelBarBgAsset', {
	anchorX: 1.0,
	// right edge
	anchorY: 1.0,
	// bottom edge
	x: 0,
	y: 8
});
var fuelBar = LK.getAsset('fuelBarAsset', {
	width: fuelBarWidth,
	height: fuelBarHeight,
	anchorX: 1.0,
	// right edge
	anchorY: 1.0,
	// bottom edge
	x: 0,
	y: 0
});
// Add to bottomRight GUI overlay so it stays in the bottom right corner
LK.gui.bottomRight.addChild(fuelBarBg);
LK.gui.bottomRight.addChild(fuelBar);
// Fuel bar icon (sembol) ekle
var fuelBarIcon = LK.getAsset('fuelBarIcon', {
	anchorX: 1.0,
	anchorY: 1.0,
	x: -fuelBarWidth - 32,
	// Barın hemen soluna
	y: 0
});
LK.gui.bottomRight.addChild(fuelBarIcon);
// En yüksek skor (oyun başında sıfır)
var highScore = 0;
// --- Fuel Warning Icon (center, hidden by default) ---
var fuelWarningIcon = LK.getAsset('fuelWarningIcon', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: GAME_WIDTH / 2,
	y: GAME_HEIGHT / 2,
	alpha: 0 // Start hidden
});
game.addChild(fuelWarningIcon);
var highScoreTxt = new Text2('', {
	size: 60,
	fill: 0xFFFF00
});
highScoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(highScoreTxt);
function updateHighScore() {
	if (distance > highScore) highScore = distance;
	highScoreTxt.setText('En Yüksek: ' + highScore);
}
updateHighScore();
// Sürükleme için
var dragStartX = null;
var dragStartLane = null;
// Oyun bitti mi?
var isGameOver = false;
// Menu state
var isMenu = true;
var isCarSelect = false;
var selectedPlayerCarAsset = 'playerCar'; // default
var selectedEnemyCarAssets = []; // if empty, all types used
// Car asset list for selection (player and enemy)
var allCarAssets = ['playerCar', 'enemyCar', 'enemyCarRed', 'enemyCarBlue', 'enemyCarYellow', 'enemyCarGreen', 'enemyCarPurple', 'enemyCarOrange', 'enemyCarPink', 'enemyCarCyan', 'enemyCarBlack', 'enemyCarWhite', 'enemyCarBrown', 'enemyCarSilver', 'enemyCarGold', 'enemyCarNavy', 'enemyCarLime'];
// Menu overlay and play button
var menuOverlay = new Container();
var playButton = LK.getAsset('playButton', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: GAME_WIDTH / 2,
	y: GAME_HEIGHT / 2 + 200
});
menuOverlay.addChild(playButton);
// Car select button
var carSelectButton = LK.getAsset('carSelectButton', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: GAME_WIDTH / 2,
	y: GAME_HEIGHT / 2 + 800 // moved further down
});
menuOverlay.addChild(carSelectButton);
// Optionally, add a game title
var titleText = new Text2('ARABA YARIŞI', {
	size: 140,
	fill: 0xFFF700
});
titleText.anchor.set(0.5, 0.5);
titleText.x = GAME_WIDTH / 2;
titleText.y = GAME_HEIGHT / 2 - 200;
menuOverlay.addChild(titleText);
game.addChild(menuOverlay);
// Car select overlay
var carSelectOverlay = new Container();
carSelectOverlay.visible = false;
game.addChild(carSelectOverlay);
// Car select grid
var carSelectButtons = [];
var carSelectTitle = new Text2('ARABA SEÇ', {
	size: 120,
	fill: 0xFFF700
});
carSelectTitle.anchor.set(0.5, 0.5);
carSelectTitle.x = GAME_WIDTH / 2;
carSelectTitle.y = 300;
carSelectOverlay.addChild(carSelectTitle);
// Layout grid
var gridCols = 4;
var gridRows = Math.ceil(allCarAssets.length / gridCols);
var gridStartX = GAME_WIDTH / 2 - gridCols * 350 / 2 + 175;
var gridStartY = 500;
for (var i = 0; i < allCarAssets.length; i++) {
	var asset = allCarAssets[i];
	var btn = LK.getAsset(asset, {
		anchorX: 0.5,
		anchorY: 0.5,
		x: gridStartX + i % gridCols * 350,
		y: gridStartY + Math.floor(i / gridCols) * 400
	});
	carSelectOverlay.addChild(btn);
	carSelectButtons.push({
		btn: btn,
		asset: asset
	});
}
// Car select back button
var carSelectBackBtn = new Text2('GERİ', {
	size: 80,
	fill: 0xFFFFFF
});
carSelectBackBtn.anchor.set(0.5, 0.5);
carSelectBackBtn.x = GAME_WIDTH / 2;
carSelectBackBtn.y = GAME_HEIGHT - 300;
carSelectOverlay.addChild(carSelectBackBtn);
// Only handle tap for menu or game or car select
game.down = function (x, y, obj) {
	if (isMenu) {
		// Play button
		var bx = playButton.x,
			by = playButton.y,
			bw = playButton.width,
			bh = playButton.height;
		if (x >= bx - bw / 2 && x <= bx + bw / 2 && y >= by - bh / 2 && y <= by + bh / 2) {
			isMenu = false;
			menuOverlay.visible = false;
			return;
		}
		// Car select button
		var csx = carSelectButton.x,
			csy = carSelectButton.y,
			csw = carSelectButton.width,
			csh = carSelectButton.height;
		if (x >= csx - csw / 2 && x <= csx + csw / 2 && y >= csy - csh / 2 && y <= csy + csh / 2) {
			isMenu = false;
			isCarSelect = true;
			menuOverlay.visible = false;
			carSelectOverlay.visible = true;
			return;
		}
		return;
	}
	if (isCarSelect) {
		// Car select grid
		for (var i = 0; i < carSelectButtons.length; i++) {
			var btn = carSelectButtons[i].btn;
			var bx = btn.x,
				by = btn.y,
				bw = btn.width,
				bh = btn.height;
			if (x >= bx - bw / 2 && x <= bx + bw / 2 && y >= by - bh / 2 && y <= by + bh / 2) {
				selectedPlayerCarAsset = carSelectButtons[i].asset;
				isCarSelect = false;
				carSelectOverlay.visible = false;
				// Reset player car
				player.destroy();
				player = new PlayerCar();
				player.lane = 1;
				player.x = LANE_X[player.lane];
				player.y = GAME_HEIGHT - 500;
				game.addChild(player);
				menuOverlay.visible = false;
				isMenu = false;
				return;
			}
		}
		// Back button
		var bbx = carSelectBackBtn.x,
			bby = carSelectBackBtn.y;
		var bbw = 200,
			bbh = 120;
		if (x >= bbx - bbw / 2 && x <= bbx + bbw / 2 && y >= bby - bbh / 2 && y <= bby + bbh / 2) {
			isCarSelect = false;
			carSelectOverlay.visible = false;
			isMenu = true;
			menuOverlay.visible = true;
			return;
		}
		return;
	}
	// Game controls
	if (x > GAME_WIDTH / 2) {
		movePlayerToLane(player.lane + 1);
	} else {
		movePlayerToLane(player.lane - 1);
	}
};
// Oyun hareketleri
function movePlayerToLane(lane) {
	if (lane < 0) lane = 0;
	if (lane > LANE_COUNT - 1) lane = LANE_COUNT - 1;
	if (lane !== player.lane) {
		player.lane = lane;
		// Yumuşak geçiş animasyonu
		tween(player, {
			x: LANE_X[lane]
		}, {
			duration: 120,
			easing: tween.cubicOut
		});
		// Araba hareket sesi çal
		LK.getSound('Carsound').play();
	}
}
// Dokunma ile sağ/sola bir şerit hareket
// (removed duplicate game.down, handled above with overlay forwarding)
game.move = function (x, y, obj) {
	// Hareket gerekmez, tap ile kontrol
};
game.up = function (x, y, obj) {
	// Gerekli değil, tap ile kontrol
};
// Çarpışma kontrolü
function checkCollision(a, b) {
	// Basit dikdörtgen çarpışma
	return Math.abs(a.x - b.x) < (a.width + b.width) / 2 - 20 && Math.abs(a.y - b.y) < (a.height + b.height) / 2 - 20;
}
// Oyun güncelleme
game.update = function () {
	if (isMenu) {
		return;
	}
	if (isCarSelect) {
		return;
	}
	if (isGameOver) {
		return;
	}
	// Müzik başlat (her zaman)
	if (!LK.isMusicPlaying || !LK.isMusicPlaying('A')) {
		LK.playMusic('A', {
			loop: true
		});
	}
	// Skor: mesafe arttıkça artar
	distance += 1;
	scoreTxt.setText(distance);
	updateHighScore();
	// --- Fuel decrease and bar update ---
	if (!isGameOver && !isMenu && !isCarSelect) {
		fuel -= FUEL_DECREASE_PER_TICK;
		if (fuel < 0) fuel = 0;
		// Update fuel bar width
		var fuelRatio = fuel / FUEL_MAX;
		if (fuelRatio < 0) fuelRatio = 0;
		fuelBar.width = fuelBarWidth * fuelRatio;
		// Show/hide and blink fuel warning icon if below/above 20%
		if (fuelRatio < 0.2) {
			// Blink: fade in/out using a sine wave based on LK.ticks
			var blinkAlpha = 0.5 + 0.5 * Math.sin(LK.ticks * 0.2);
			fuelWarningIcon.alpha = blinkAlpha;
		} else {
			if (fuelWarningIcon.alpha !== 0) fuelWarningIcon.alpha = 0;
		}
		// Fuel bar color and flash effect when low
		if (fuelRatio <= 0.15) {
			// Change color to bright red and flash
			if (!fuelBar._isFlashing) {
				fuelBar._isFlashing = true;
				LK.effects.flashObject(fuelBar, 0xffffff, 200);
			}
			fuelBar.tint = 0xff0000;
		} else if (fuelRatio <= 0.35) {
			fuelBar.tint = 0xff8800;
			fuelBar._isFlashing = false;
		} else {
			fuelBar.tint = 0xff2222;
			fuelBar._isFlashing = false;
		}
		// Game over if fuel is empty
		if (fuel <= 0) {
			isGameOver = true;
			LK.effects.flashScreen(0xff0000, 800);
			LK.showGameOver();
			return;
		}
	} else {
		// Reset tint and flash state if not in game
		if (fuelBar) {
			fuelBar.tint = 0xff2222;
			fuelBar._isFlashing = false;
		}
		// Hide fuel warning icon if not in game
		if (fuelWarningIcon && fuelWarningIcon.alpha !== 0) fuelWarningIcon.alpha = 0;
	}
	// Yol çizgilerini hareket ettir
	for (var i = 0; i < roadLines.length; i++) {
		var line = roadLines[i];
		line.update();
		if (line.y > GAME_HEIGHT + 100) {
			line.y -= 8 * 400;
		}
	}
	// Sol ağaçları hareket ettir
	for (var i = 0; i < leftTrees.length; i++) {
		var tree = leftTrees[i];
		tree.update();
		if (tree.y > GAME_HEIGHT + 100) {
			tree.y -= 8 * 400;
		}
	}
	// Sağ ağaçları hareket ettir
	for (var i = 0; i < rightTrees.length; i++) {
		var tree = rightTrees[i];
		tree.update();
		if (tree.y > GAME_HEIGHT + 100) {
			tree.y -= 8 * 400;
		}
	}
	// Sol ağaç altı bölgeleri hareket ettir
	for (var i = 0; i < leftTreeZones.length; i++) {
		var zone = leftTreeZones[i];
		zone.update();
		if (zone.y > GAME_HEIGHT + 100) {
			zone.y -= 8 * 400;
		}
	}
	// Sağ ağaç altı bölgeleri hareket ettir
	for (var i = 0; i < rightTreeZones.length; i++) {
		var zone = rightTreeZones[i];
		zone.update();
		if (zone.y > GAME_HEIGHT + 100) {
			zone.y -= 8 * 400;
		}
	}
	// Engelleri hareket ettir
	for (var i = enemyCars.length - 1; i >= 0; i--) {
		var enemy = enemyCars[i];
		enemy.update();
		// Ekrandan çıktıysa sil
		if (enemy.direction === 1 && enemy.y > GAME_HEIGHT + 200 || enemy.direction === -1 && enemy.y < -200) {
			enemy.destroy();
			enemyCars.splice(i, 1);
			continue;
		}
		// Çarpışma kontrolü
		if (checkCollision(player, enemy)) {
			isGameOver = true;
			// Çarpışma anında oyuncu arabasına görsel efekt uygula
			LK.effects.flashObject(player, 0xff0000, 800);
			LK.effects.flashScreen(0xff0000, 800);
			LK.showGameOver();
			return;
		}
	}
	// Arkadan kovalayan düşman araba hareketi ve çarpışma
	chaserCar.x = player.x;
	chaserCar.targetY = player.y + 600 - distance / 10; // Mesafe arttıkça yaklaşsın
	if (chaserCar.targetY < player.y + 200) chaserCar.targetY = player.y + 200; // Minimum mesafe
	chaserCar.update();
	// Çarpışma kontrolü (chaserCar)
	if (checkCollision(player, chaserCar)) {
		isGameOver = true;
		LK.effects.flashObject(player, 0xff0000, 800);
		LK.effects.flashScreen(0xff0000, 800);
		LK.showGameOver();
		return;
	}
	// Nitro spawn ve hareket
	nitroSpawnTick++;
	if (nitroSpawnTick >= NITRO_SPAWN_INTERVAL) {
		nitroSpawnTick = 0;
		// Rastgele bir şeride nitro koy
		var lane = Math.floor(Math.random() * LANE_COUNT);
		var nitro = new Nitro();
		nitro.x = LANE_X[lane];
		nitro.y = -150;
		nitro.lane = lane;
		game.addChild(nitro);
		nitros.push(nitro);
	}
	// Nitro'ları hareket ettir ve topla
	for (var i = nitros.length - 1; i >= 0; i--) {
		var n = nitros[i];
		n.update();
		if (n.y > GAME_HEIGHT + 200) {
			n.destroy();
			nitros.splice(i, 1);
			continue;
		}
		// Toplama kontrolü
		if (!nitroActive && checkCollision(player, n)) {
			nitroActive = true;
			nitroTimer = NITRO_DURATION;
			playerSpeedBoost = 18; // Hız artışı
			// Nitro alınca benzin azalsın
			fuel -= 200;
			if (fuel < 0) fuel = 0;
			n.destroy();
			nitros.splice(i, 1);
			// Görsel efekt: arabayı maviye flashla
			LK.effects.flashObject(player, 0x00cfff, 400);
			continue;
		}
	}
	// --- FuelCan spawn ve hareket ---
	fuelCanSpawnTick++;
	if (fuelCanSpawnTick >= FUELCAN_SPAWN_INTERVAL) {
		fuelCanSpawnTick = 0;
		// Rastgele bir şeride benzin koy
		var lane = Math.floor(Math.random() * LANE_COUNT);
		var fuelCan = new FuelCan();
		fuelCan.x = LANE_X[lane];
		fuelCan.y = -120;
		fuelCan.lane = lane;
		game.addChild(fuelCan);
		fuelCans.push(fuelCan);
	}
	// FuelCan'ları hareket ettir ve topla
	for (var i = fuelCans.length - 1; i >= 0; i--) {
		var f = fuelCans[i];
		f.update();
		if (f.y > GAME_HEIGHT + 200) {
			f.destroy();
			fuelCans.splice(i, 1);
			continue;
		}
		// Toplama kontrolü
		if (checkCollision(player, f)) {
			// Yakıtı artır, maksimumu geçmesin
			fuel += FUELCAN_AMOUNT;
			if (fuel > FUEL_MAX) fuel = FUEL_MAX;
			// Görsel efekt: fuel barı beyaza flashla
			LK.effects.flashObject(fuelBar, 0xffffff, 200);
			f.destroy();
			fuelCans.splice(i, 1);
			continue;
		}
	}
	// Nitro etkisi
	if (nitroActive) {
		nitroTimer--;
		if (nitroTimer > 0) {
			// Hızlı ilerle: yol, ağaçlar, düşmanlar, chaserCar daha hızlı hareket eder
			for (var i = 0; i < roadLines.length; i++) roadLines[i].y += playerSpeedBoost;
			for (var i = 0; i < leftTrees.length; i++) leftTrees[i].y += playerSpeedBoost;
			for (var i = 0; i < rightTrees.length; i++) rightTrees[i].y += playerSpeedBoost;
			for (var i = 0; i < leftTreeZones.length; i++) leftTreeZones[i].y += playerSpeedBoost;
			for (var i = 0; i < rightTreeZones.length; i++) rightTreeZones[i].y += playerSpeedBoost;
			for (var i = 0; i < enemyCars.length; i++) enemyCars[i].y += playerSpeedBoost;
			chaserCar.y += playerSpeedBoost * 0.7;
			// Araba kadrajdan çıkmasın: player.y görsel olarak ileri kayarken sınırla
			var playerVisualMove = playerSpeedBoost * 0.5;
			var playerMinY = 300 + player.height / 2; // Üst sınır (ekranda kalacak şekilde)
			var playerMaxY = GAME_HEIGHT - 500; // Alt sınır (başlangıç pozisyonu)
			var newPlayerY = player.y + playerVisualMove;
			if (newPlayerY < playerMinY) {
				player.y = playerMinY;
			} else if (newPlayerY > playerMaxY) {
				player.y = playerMaxY;
			} else {
				player.y = newPlayerY;
			}
			distance += Math.floor(playerSpeedBoost * 0.7);
		} else {
			nitroActive = false;
			playerSpeedBoost = 0;
		}
	} else {
		// Nitro aktif değilse hiçbir blur overlay kodu çalışmasın
	}
	// Yeni engel oluştur
	enemySpawnTick++;
	var currentSpawnInterval = getEnemySpawnInterval();
	if (enemySpawnTick >= currentSpawnInterval) {
		enemySpawnTick = 0;
		// Rastgele bir veya iki şeride engel koy
		var lanes = [0, 1, 2, 3];
		// %60 tek araba, %40 iki araba
		var count = Math.random() < 0.6 ? 1 : 2;
		for (var j = 0; j < count; j++) {
			if (lanes.length === 0) break;
			var idx = Math.floor(Math.random() * lanes.length);
			var lane = lanes[idx];
			lanes.splice(idx, 1);
			var enemy = new EnemyCar();
			enemy.x = LANE_X[lane];
			// Soldaki iki şerit (0 ve 1) için de aşağı doğru giden araba oluştur
			enemy.y = -200;
			enemy.direction = 1; // Aşağı hareket
			game.addChild(enemy);
			enemyCars.push(enemy);
		}
	}
};
// Oyun yeniden başlatıldığında sıfırla
game.on('reset', function () {
	// Arabaları ve çizgileri sil
	for (var i = 0; i < enemyCars.length; i++) {
		enemyCars[i].destroy();
	}
	enemyCars = [];
	// Nitro'ları sil
	for (var i = 0; i < nitros.length; i++) {
		nitros[i].destroy();
	}
	nitros = [];
	// ChaserCar'ı sıfırla
	chaserCar.x = player.x;
	chaserCar.y = GAME_HEIGHT + 400;
	chaserCar.targetY = player.y + 600;
	nitroActive = false;
	nitroTimer = 0;
	playerSpeedBoost = 0;
	distance = 0;
	scoreTxt.setText('0');
	isGameOver = false;
	player.lane = 1;
	player.x = LANE_X[1];
	player.y = GAME_HEIGHT - 500;
	updateHighScore();
	// --- Reset fuel ---
	fuel = FUEL_MAX;
	fuelBar.width = fuelBarWidth;
	// Menüye geri dön
	isMenu = true;
	isCarSelect = false;
	if (menuOverlay) menuOverlay.visible = true;
	// Reset car selection to default
	selectedPlayerCarAsset = 'playerCar';
	selectedEnemyCarAssets = [];
	// Müzik başlat (menüde)
}); /**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
/**** 
* Classes
****/ 
// Arkadan kovalayan düşman araba
var ChaserCar = Container.expand(function () {
	var self = Container.call(this);
	var car = self.attachAsset('chaserCar', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = car.width;
	self.height = car.height;
	self.speed = 12; // Başlangıç hızı
	self.targetY = 0; // Hedef y (player'ın arkasında başlar)
	self.update = function () {
		// Oyuncuya yaklaş
		if (self.y < self.targetY) {
			self.y += self.speed;
			if (self.y > self.targetY) self.y = self.targetY;
		}
	};
	return self;
});
// Düz ve ters giden engel arabalar
var EnemyCar = Container.expand(function () {
	var self = Container.call(this);
	// Farklı tipte araba şekilleri ve renkleri
	var carTypes = [{
		asset: 'enemyCar',
		shape: 'box'
	}, {
		asset: 'enemyCarRed',
		shape: 'box'
	}, {
		asset: 'enemyCarBlue',
		shape: 'box'
	}, {
		asset: 'enemyCarYellow',
		shape: 'box'
	}, {
		asset: 'enemyCarGreen',
		shape: 'ellipse'
	}, {
		asset: 'enemyCarPurple',
		shape: 'box'
	}, {
		asset: 'enemyCar',
		shape: 'ellipse'
	}, {
		asset: 'enemyCarRed',
		shape: 'ellipse'
	}, {
		asset: 'enemyCarBlue',
		shape: 'ellipse'
	}, {
		asset: 'enemyCarYellow',
		shape: 'ellipse'
	}, {
		asset: 'enemyCarGreen',
		shape: 'box'
	}, {
		asset: 'enemyCarPurple',
		shape: 'ellipse'
	}, {
		asset: 'enemyCar',
		shape: 'box'
	}, {
		asset: 'enemyCarRed',
		shape: 'box'
	}, {
		asset: 'enemyCarBlue',
		shape: 'box'
	}, {
		asset: 'enemyCarYellow',
		shape: 'box'
	},
	// 10 yeni çeşit
	{
		asset: 'enemyCarOrange',
		shape: 'box'
	}, {
		asset: 'enemyCarPink',
		shape: 'ellipse'
	}, {
		asset: 'enemyCarCyan',
		shape: 'box'
	}, {
		asset: 'enemyCarBlack',
		shape: 'ellipse'
	}, {
		asset: 'enemyCarWhite',
		shape: 'box'
	}, {
		asset: 'enemyCarBrown',
		shape: 'ellipse'
	}, {
		asset: 'enemyCarSilver',
		shape: 'box'
	}, {
		asset: 'enemyCarGold',
		shape: 'ellipse'
	}, {
		asset: 'enemyCarNavy',
		shape: 'box'
	}, {
		asset: 'enemyCarLime',
		shape: 'ellipse'
	},
	// 3 yeni çeşit (arttırıldı)
	{
		asset: 'enemyCarBlack',
		shape: 'box'
	}, {
		asset: 'enemyCarCyan',
		shape: 'ellipse'
	}, {
		asset: 'enemyCarBrown',
		shape: 'box'
	}];
	// If selectedEnemyCarAssets is set, filter carTypes
	if (typeof selectedEnemyCarAssets !== 'undefined' && selectedEnemyCarAssets && selectedEnemyCarAssets.length > 0) {
		var filtered = [];
		for (var i = 0; i < carTypes.length; i++) {
			if (selectedEnemyCarAssets.indexOf(carTypes[i].asset) !== -1) {
				filtered.push(carTypes[i]);
			}
		}
		if (filtered.length > 0) carTypes = filtered;
	}
	// Rastgele bir tip seç
	var typeIdx = Math.floor(Math.random() * carTypes.length);
	var carType = carTypes[typeIdx];
	var car = self.attachAsset(carType.asset, {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = car.width;
	self.height = car.height;
	self.speed = 18; // Varsayılan hız (aşağı)
	self.direction = 1; // 1: aşağı, -1: yukarı (ters)
	self.update = function () {
		self.y += self.speed * self.direction;
	};
	return self;
});
// Benzin bidonu (yolda çıkan, toplanınca yakıt artırır)
var FuelCan = Container.expand(function () {
	var self = Container.call(this);
	// Benzin bidonu için görsel asset kullan
	var can = self.attachAsset('fuelCan', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = can.width;
	self.height = can.height;
	self.speed = 24;
	self.lane = 1;
	self.update = function () {
		self.y += self.speed;
	};
	return self;
});
// Nitro power-up
var Nitro = Container.expand(function () {
	var self = Container.call(this);
	var nitro = self.attachAsset('nitro', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = nitro.width;
	self.height = nitro.height;
	self.speed = 24;
	self.lane = 1;
	self.update = function () {
		self.y += self.speed;
	};
	return self;
});
// Oyuncu arabası
var PlayerCar = Container.expand(function () {
	var self = Container.call(this);
	// Use selectedPlayerCarAsset if set, fallback to 'playerCar'
	var asset = typeof selectedPlayerCarAsset !== 'undefined' && selectedPlayerCarAsset ? selectedPlayerCarAsset : 'playerCar';
	var car = self.attachAsset(asset, {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = car.width;
	self.height = car.height;
	return self;
});
// Yol çizgisi (hareketli)
var RoadLine = Container.expand(function () {
	var self = Container.call(this);
	var line = self.attachAsset('roadLine', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = line.width;
	self.height = line.height;
	self.speed = 24;
	self.update = function () {
		self.y += self.speed;
	};
	return self;
});
// Yan ağaçlar (sol ve sağ)
var TreeLeft = Container.expand(function () {
	var self = Container.call(this);
	var tree = self.attachAsset('treeLeft', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = tree.width;
	self.height = tree.height;
	self.speed = 24;
	self.update = function () {
		self.y += self.speed;
	};
	return self;
});
var TreeRight = Container.expand(function () {
	var self = Container.call(this);
	var tree = self.attachAsset('treeRight', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = tree.width;
	self.height = tree.height;
	self.speed = 24;
	self.update = function () {
		self.y += self.speed;
	};
	return self;
});
// Tree bottom zone (left)
var TreeZoneLeft = Container.expand(function () {
	var self = Container.call(this);
	var zone = self.attachAsset('treeZoneLeft', {
		anchorX: 0.5,
		anchorY: 0.0
	});
	self.width = zone.width;
	self.height = zone.height;
	self.speed = 24;
	self.update = function () {
		self.y += self.speed;
	};
	return self;
});
// Tree bottom zone (right)
var TreeZoneRight = Container.expand(function () {
	var self = Container.call(this);
	var zone = self.attachAsset('treeZoneRight', {
		anchorX: 0.5,
		anchorY: 0.0
	});
	self.width = zone.width;
	self.height = zone.height;
	self.speed = 24;
	self.update = function () {
		self.y += self.speed;
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x222222
});
/**** 
* Game Code
****/ 
// Nitro asset
// Chasing enemy car asset (arkadan kovalayan düşman)
// Köprü ve arka plan için özelleştirilebilir assetler
// 10 yeni çeşit için ek varlıklar
// Oyun alanı boyutları
// Köprü ve arka planı ekle
// Tree bottom zone assets (customize these IDs as needed)
// Fuel bar yan sembolü
var backgroundImg = LK.getAsset('background', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 2048 / 2,
	y: 2732 / 2
});
game.addChild(backgroundImg);
var bridgeImg = LK.getAsset('bridge', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 2048 / 2,
	y: 2732 / 2
});
game.addChild(bridgeImg);
// Oyuncu arabası (kırmızı kutu)
// Engeller (gri kutu)
// Yol çizgisi (beyaz ince kutu)
// Yan ağaçlar için basit şekil (dilerseniz image ile de değiştirebilirsiniz)
// Play button asset (customizable)
var GAME_WIDTH = 2048;
var GAME_HEIGHT = 2732;
// Yolun genişliği ve şeritler
var ROAD_WIDTH = 1200;
var ROAD_LEFT = (GAME_WIDTH - ROAD_WIDTH) / 2;
var ROAD_RIGHT = ROAD_LEFT + ROAD_WIDTH;
// Şerit sayısı ve pozisyonları
var LANE_COUNT = 4;
var LANE_WIDTH = ROAD_WIDTH / LANE_COUNT;
var LANE_X = [ROAD_LEFT + LANE_WIDTH * 0.5, ROAD_LEFT + LANE_WIDTH * 1.5, ROAD_LEFT + LANE_WIDTH * 2.5, ROAD_LEFT + LANE_WIDTH * 3.5];
// Yol çizgileri
var roadLines = [];
// Yan ağaçlar
var leftTrees = [];
var rightTrees = [];
// Tree bottom zones
var leftTreeZones = [];
var rightTreeZones = [];
function spawnRoadLines() {
	// Her şeridin ortasına, aralıklı çizgiler
	for (var lane = 0; lane < LANE_COUNT; lane++) {
		for (var i = 0; i < 8; i++) {
			var line = new RoadLine();
			line.x = ROAD_LEFT + LANE_WIDTH * (lane + 0.5);
			line.y = i * 400;
			roadLines.push(line);
			game.addChild(line);
		}
	}
	// Sol ve sağ kenara ağaçlar ve altındaki bölgeler
	for (var i = 0; i < 8; i++) {
		var leftTree = new TreeLeft();
		leftTree.x = ROAD_LEFT - 120; // Sol kenarın biraz dışında
		leftTree.y = i * 400;
		leftTrees.push(leftTree);
		game.addChild(leftTree);
		var rightTree = new TreeRight();
		rightTree.x = ROAD_RIGHT + 120; // Sağ kenarın biraz dışında
		rightTree.y = i * 400;
		rightTrees.push(rightTree);
		game.addChild(rightTree);
		// Tree bottom zones
		var leftZone = new TreeZoneLeft();
		leftZone.x = ROAD_LEFT - 120;
		leftZone.y = leftTree.y + leftTree.height / 2; // Ağacın altına hizala
		leftTreeZones.push(leftZone);
		game.addChild(leftZone);
		var rightZone = new TreeZoneRight();
		rightZone.x = ROAD_RIGHT + 120;
		rightZone.y = rightTree.y + rightTree.height / 2;
		rightTreeZones.push(rightZone);
		game.addChild(rightZone);
	}
}
spawnRoadLines();
// Oyuncu arabası
var player = new PlayerCar();
player.lane = 1; // Ortadaki şerit
player.x = LANE_X[player.lane];
player.y = GAME_HEIGHT - 500;
game.addChild(player);
// Arkadan kovalayan düşman araba
var chaserCar = new ChaserCar();
chaserCar.x = player.x;
chaserCar.y = GAME_HEIGHT + 400; // Ekranın dışında başlat
chaserCar.targetY = player.y + 600; // Oyuncunun arkasında başlat
game.addChild(chaserCar);
// Nitro power-up'lar
var nitros = [];
var nitroSpawnTick = 0;
var NITRO_SPAWN_INTERVAL = 180; // 3 saniyede bir
var nitroActive = false;
var nitroTimer = 0;
var NITRO_DURATION = 120; // 2 saniye
var playerSpeedBoost = 0;
// --- FuelCan (yolda benzin) değişkenleri ---
var fuelCans = [];
var fuelCanSpawnTick = 0;
var FUELCAN_SPAWN_INTERVAL = 300; // Her 5 saniyede bir (60fps)
var FUELCAN_AMOUNT = 250; // Toplayınca eklenecek yakıt miktarı
// Engeller
var enemyCars = [];
var ENEMY_SPAWN_INTERVAL_BASE = 60; // Başlangıçta 60 tickte bir (1 sn)
var ENEMY_SPAWN_INTERVAL_MIN = 18; // Minimum 0.3 sn (18 tick)
var enemySpawnTick = 0;
function getEnemySpawnInterval() {
	// Mesafe arttıkça interval azalır, minimuma kadar iner
	// 0-2000 arası 60, 2000'den sonra 30'a kadar iner, 6000'den sonra tekrar 60'a döner (normalleşir)
	if (distance < 2000) return ENEMY_SPAWN_INTERVAL_BASE;
	if (distance < 6000) return Math.max(ENEMY_SPAWN_INTERVAL_BASE - Math.floor((distance - 2000) / 133), 30);
	// 6000 ve sonrası: tekrar normal (60 tick) aralığına döner
	return ENEMY_SPAWN_INTERVAL_BASE;
}
// Skor
var distance = 0;
var scoreTxt = new Text2('0', {
	size: 120,
	fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// --- Fuel Bar Variables and UI ---
var FUEL_MAX = 1000;
var fuel = FUEL_MAX;
// Benzin daha yavaş azalsın
var FUEL_DECREASE_PER_TICK = 0.3; // daha yavaş azalsın
var fuelBarWidth = 600;
var fuelBarHeight = 40;
var fuelBarBg = LK.getAsset('fuelBarBgAsset', {
	anchorX: 1.0,
	// right edge
	anchorY: 1.0,
	// bottom edge
	x: 0,
	y: 8
});
var fuelBar = LK.getAsset('fuelBarAsset', {
	width: fuelBarWidth,
	height: fuelBarHeight,
	anchorX: 1.0,
	// right edge
	anchorY: 1.0,
	// bottom edge
	x: 0,
	y: 0
});
// Add to bottomRight GUI overlay so it stays in the bottom right corner
LK.gui.bottomRight.addChild(fuelBarBg);
LK.gui.bottomRight.addChild(fuelBar);
// Fuel bar icon (sembol) ekle
var fuelBarIcon = LK.getAsset('fuelBarIcon', {
	anchorX: 1.0,
	anchorY: 1.0,
	x: -fuelBarWidth - 32,
	// Barın hemen soluna
	y: 0
});
LK.gui.bottomRight.addChild(fuelBarIcon);
// En yüksek skor (oyun başında sıfır)
var highScore = 0;
// --- Fuel Warning Icon (center, hidden by default) ---
var fuelWarningIcon = LK.getAsset('fuelWarningIcon', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: GAME_WIDTH / 2,
	y: GAME_HEIGHT / 2,
	alpha: 0 // Start hidden
});
game.addChild(fuelWarningIcon);
var highScoreTxt = new Text2('', {
	size: 60,
	fill: 0xFFFF00
});
highScoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(highScoreTxt);
function updateHighScore() {
	if (distance > highScore) highScore = distance;
	highScoreTxt.setText('En Yüksek: ' + highScore);
}
updateHighScore();
// Sürükleme için
var dragStartX = null;
var dragStartLane = null;
// Oyun bitti mi?
var isGameOver = false;
// Menu state
var isMenu = true;
var isCarSelect = false;
var selectedPlayerCarAsset = 'playerCar'; // default
var selectedEnemyCarAssets = []; // if empty, all types used
// Car asset list for selection (player and enemy)
var allCarAssets = ['playerCar', 'enemyCar', 'enemyCarRed', 'enemyCarBlue', 'enemyCarYellow', 'enemyCarGreen', 'enemyCarPurple', 'enemyCarOrange', 'enemyCarPink', 'enemyCarCyan', 'enemyCarBlack', 'enemyCarWhite', 'enemyCarBrown', 'enemyCarSilver', 'enemyCarGold', 'enemyCarNavy', 'enemyCarLime'];
// Menu overlay and play button
var menuOverlay = new Container();
var playButton = LK.getAsset('playButton', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: GAME_WIDTH / 2,
	y: GAME_HEIGHT / 2 + 200
});
menuOverlay.addChild(playButton);
// Car select button
var carSelectButton = LK.getAsset('carSelectButton', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: GAME_WIDTH / 2,
	y: GAME_HEIGHT / 2 + 800 // moved further down
});
menuOverlay.addChild(carSelectButton);
// Optionally, add a game title
var titleText = new Text2('ARABA YARIŞI', {
	size: 140,
	fill: 0xFFF700
});
titleText.anchor.set(0.5, 0.5);
titleText.x = GAME_WIDTH / 2;
titleText.y = GAME_HEIGHT / 2 - 200;
menuOverlay.addChild(titleText);
game.addChild(menuOverlay);
// Car select overlay
var carSelectOverlay = new Container();
carSelectOverlay.visible = false;
game.addChild(carSelectOverlay);
// Car select grid
var carSelectButtons = [];
var carSelectTitle = new Text2('ARABA SEÇ', {
	size: 120,
	fill: 0xFFF700
});
carSelectTitle.anchor.set(0.5, 0.5);
carSelectTitle.x = GAME_WIDTH / 2;
carSelectTitle.y = 300;
carSelectOverlay.addChild(carSelectTitle);
// Layout grid
var gridCols = 4;
var gridRows = Math.ceil(allCarAssets.length / gridCols);
var gridStartX = GAME_WIDTH / 2 - gridCols * 350 / 2 + 175;
var gridStartY = 500;
for (var i = 0; i < allCarAssets.length; i++) {
	var asset = allCarAssets[i];
	var btn = LK.getAsset(asset, {
		anchorX: 0.5,
		anchorY: 0.5,
		x: gridStartX + i % gridCols * 350,
		y: gridStartY + Math.floor(i / gridCols) * 400
	});
	carSelectOverlay.addChild(btn);
	carSelectButtons.push({
		btn: btn,
		asset: asset
	});
}
// Car select back button
var carSelectBackBtn = new Text2('GERİ', {
	size: 80,
	fill: 0xFFFFFF
});
carSelectBackBtn.anchor.set(0.5, 0.5);
carSelectBackBtn.x = GAME_WIDTH / 2;
carSelectBackBtn.y = GAME_HEIGHT - 300;
carSelectOverlay.addChild(carSelectBackBtn);
// Only handle tap for menu or game or car select
game.down = function (x, y, obj) {
	if (isMenu) {
		// Play button
		var bx = playButton.x,
			by = playButton.y,
			bw = playButton.width,
			bh = playButton.height;
		if (x >= bx - bw / 2 && x <= bx + bw / 2 && y >= by - bh / 2 && y <= by + bh / 2) {
			isMenu = false;
			menuOverlay.visible = false;
			return;
		}
		// Car select button
		var csx = carSelectButton.x,
			csy = carSelectButton.y,
			csw = carSelectButton.width,
			csh = carSelectButton.height;
		if (x >= csx - csw / 2 && x <= csx + csw / 2 && y >= csy - csh / 2 && y <= csy + csh / 2) {
			isMenu = false;
			isCarSelect = true;
			menuOverlay.visible = false;
			carSelectOverlay.visible = true;
			return;
		}
		return;
	}
	if (isCarSelect) {
		// Car select grid
		for (var i = 0; i < carSelectButtons.length; i++) {
			var btn = carSelectButtons[i].btn;
			var bx = btn.x,
				by = btn.y,
				bw = btn.width,
				bh = btn.height;
			if (x >= bx - bw / 2 && x <= bx + bw / 2 && y >= by - bh / 2 && y <= by + bh / 2) {
				selectedPlayerCarAsset = carSelectButtons[i].asset;
				isCarSelect = false;
				carSelectOverlay.visible = false;
				// Reset player car
				player.destroy();
				player = new PlayerCar();
				player.lane = 1;
				player.x = LANE_X[player.lane];
				player.y = GAME_HEIGHT - 500;
				game.addChild(player);
				menuOverlay.visible = false;
				isMenu = false;
				return;
			}
		}
		// Back button
		var bbx = carSelectBackBtn.x,
			bby = carSelectBackBtn.y;
		var bbw = 200,
			bbh = 120;
		if (x >= bbx - bbw / 2 && x <= bbx + bbw / 2 && y >= bby - bbh / 2 && y <= bby + bbh / 2) {
			isCarSelect = false;
			carSelectOverlay.visible = false;
			isMenu = true;
			menuOverlay.visible = true;
			return;
		}
		return;
	}
	// Game controls
	if (x > GAME_WIDTH / 2) {
		movePlayerToLane(player.lane + 1);
	} else {
		movePlayerToLane(player.lane - 1);
	}
};
// Oyun hareketleri
function movePlayerToLane(lane) {
	if (lane < 0) lane = 0;
	if (lane > LANE_COUNT - 1) lane = LANE_COUNT - 1;
	if (lane !== player.lane) {
		player.lane = lane;
		// Yumuşak geçiş animasyonu
		tween(player, {
			x: LANE_X[lane]
		}, {
			duration: 120,
			easing: tween.cubicOut
		});
		// Araba hareket sesi çal
		LK.getSound('Carsound').play();
	}
}
// Dokunma ile sağ/sola bir şerit hareket
// (removed duplicate game.down, handled above with overlay forwarding)
game.move = function (x, y, obj) {
	// Hareket gerekmez, tap ile kontrol
};
game.up = function (x, y, obj) {
	// Gerekli değil, tap ile kontrol
};
// Çarpışma kontrolü
function checkCollision(a, b) {
	// Basit dikdörtgen çarpışma
	return Math.abs(a.x - b.x) < (a.width + b.width) / 2 - 20 && Math.abs(a.y - b.y) < (a.height + b.height) / 2 - 20;
}
// Oyun güncelleme
game.update = function () {
	if (isMenu) {
		return;
	}
	if (isCarSelect) {
		return;
	}
	if (isGameOver) {
		return;
	}
	// Müzik başlat (her zaman)
	if (!LK.isMusicPlaying || !LK.isMusicPlaying('A')) {
		LK.playMusic('A', {
			loop: true
		});
	}
	// Skor: mesafe arttıkça artar
	distance += 1;
	scoreTxt.setText(distance);
	updateHighScore();
	// --- Fuel decrease and bar update ---
	if (!isGameOver && !isMenu && !isCarSelect) {
		fuel -= FUEL_DECREASE_PER_TICK;
		if (fuel < 0) fuel = 0;
		// Update fuel bar width
		var fuelRatio = fuel / FUEL_MAX;
		if (fuelRatio < 0) fuelRatio = 0;
		fuelBar.width = fuelBarWidth * fuelRatio;
		// Show/hide and blink fuel warning icon if below/above 20%
		if (fuelRatio < 0.2) {
			// Blink: fade in/out using a sine wave based on LK.ticks
			var blinkAlpha = 0.5 + 0.5 * Math.sin(LK.ticks * 0.2);
			fuelWarningIcon.alpha = blinkAlpha;
		} else {
			if (fuelWarningIcon.alpha !== 0) fuelWarningIcon.alpha = 0;
		}
		// Fuel bar color and flash effect when low
		if (fuelRatio <= 0.15) {
			// Change color to bright red and flash
			if (!fuelBar._isFlashing) {
				fuelBar._isFlashing = true;
				LK.effects.flashObject(fuelBar, 0xffffff, 200);
			}
			fuelBar.tint = 0xff0000;
		} else if (fuelRatio <= 0.35) {
			fuelBar.tint = 0xff8800;
			fuelBar._isFlashing = false;
		} else {
			fuelBar.tint = 0xff2222;
			fuelBar._isFlashing = false;
		}
		// Game over if fuel is empty
		if (fuel <= 0) {
			isGameOver = true;
			LK.effects.flashScreen(0xff0000, 800);
			LK.showGameOver();
			return;
		}
	} else {
		// Reset tint and flash state if not in game
		if (fuelBar) {
			fuelBar.tint = 0xff2222;
			fuelBar._isFlashing = false;
		}
		// Hide fuel warning icon if not in game
		if (fuelWarningIcon && fuelWarningIcon.alpha !== 0) fuelWarningIcon.alpha = 0;
	}
	// Yol çizgilerini hareket ettir
	for (var i = 0; i < roadLines.length; i++) {
		var line = roadLines[i];
		line.update();
		if (line.y > GAME_HEIGHT + 100) {
			line.y -= 8 * 400;
		}
	}
	// Sol ağaçları hareket ettir
	for (var i = 0; i < leftTrees.length; i++) {
		var tree = leftTrees[i];
		tree.update();
		if (tree.y > GAME_HEIGHT + 100) {
			tree.y -= 8 * 400;
		}
	}
	// Sağ ağaçları hareket ettir
	for (var i = 0; i < rightTrees.length; i++) {
		var tree = rightTrees[i];
		tree.update();
		if (tree.y > GAME_HEIGHT + 100) {
			tree.y -= 8 * 400;
		}
	}
	// Sol ağaç altı bölgeleri hareket ettir
	for (var i = 0; i < leftTreeZones.length; i++) {
		var zone = leftTreeZones[i];
		zone.update();
		if (zone.y > GAME_HEIGHT + 100) {
			zone.y -= 8 * 400;
		}
	}
	// Sağ ağaç altı bölgeleri hareket ettir
	for (var i = 0; i < rightTreeZones.length; i++) {
		var zone = rightTreeZones[i];
		zone.update();
		if (zone.y > GAME_HEIGHT + 100) {
			zone.y -= 8 * 400;
		}
	}
	// Engelleri hareket ettir
	for (var i = enemyCars.length - 1; i >= 0; i--) {
		var enemy = enemyCars[i];
		enemy.update();
		// Ekrandan çıktıysa sil
		if (enemy.direction === 1 && enemy.y > GAME_HEIGHT + 200 || enemy.direction === -1 && enemy.y < -200) {
			enemy.destroy();
			enemyCars.splice(i, 1);
			continue;
		}
		// Çarpışma kontrolü
		if (checkCollision(player, enemy)) {
			isGameOver = true;
			// Çarpışma anında oyuncu arabasına görsel efekt uygula
			LK.effects.flashObject(player, 0xff0000, 800);
			LK.effects.flashScreen(0xff0000, 800);
			LK.showGameOver();
			return;
		}
	}
	// Arkadan kovalayan düşman araba hareketi ve çarpışma
	chaserCar.x = player.x;
	chaserCar.targetY = player.y + 600 - distance / 10; // Mesafe arttıkça yaklaşsın
	if (chaserCar.targetY < player.y + 200) chaserCar.targetY = player.y + 200; // Minimum mesafe
	chaserCar.update();
	// Çarpışma kontrolü (chaserCar)
	if (checkCollision(player, chaserCar)) {
		isGameOver = true;
		LK.effects.flashObject(player, 0xff0000, 800);
		LK.effects.flashScreen(0xff0000, 800);
		LK.showGameOver();
		return;
	}
	// Nitro spawn ve hareket
	nitroSpawnTick++;
	if (nitroSpawnTick >= NITRO_SPAWN_INTERVAL) {
		nitroSpawnTick = 0;
		// Rastgele bir şeride nitro koy
		var lane = Math.floor(Math.random() * LANE_COUNT);
		var nitro = new Nitro();
		nitro.x = LANE_X[lane];
		nitro.y = -150;
		nitro.lane = lane;
		game.addChild(nitro);
		nitros.push(nitro);
	}
	// Nitro'ları hareket ettir ve topla
	for (var i = nitros.length - 1; i >= 0; i--) {
		var n = nitros[i];
		n.update();
		if (n.y > GAME_HEIGHT + 200) {
			n.destroy();
			nitros.splice(i, 1);
			continue;
		}
		// Toplama kontrolü
		if (!nitroActive && checkCollision(player, n)) {
			nitroActive = true;
			nitroTimer = NITRO_DURATION;
			playerSpeedBoost = 18; // Hız artışı
			// Nitro alınca benzin azalsın
			fuel -= 200;
			if (fuel < 0) fuel = 0;
			n.destroy();
			nitros.splice(i, 1);
			// Görsel efekt: arabayı maviye flashla
			LK.effects.flashObject(player, 0x00cfff, 400);
			continue;
		}
	}
	// --- FuelCan spawn ve hareket ---
	fuelCanSpawnTick++;
	if (fuelCanSpawnTick >= FUELCAN_SPAWN_INTERVAL) {
		fuelCanSpawnTick = 0;
		// Rastgele bir şeride benzin koy
		var lane = Math.floor(Math.random() * LANE_COUNT);
		var fuelCan = new FuelCan();
		fuelCan.x = LANE_X[lane];
		fuelCan.y = -120;
		fuelCan.lane = lane;
		game.addChild(fuelCan);
		fuelCans.push(fuelCan);
	}
	// FuelCan'ları hareket ettir ve topla
	for (var i = fuelCans.length - 1; i >= 0; i--) {
		var f = fuelCans[i];
		f.update();
		if (f.y > GAME_HEIGHT + 200) {
			f.destroy();
			fuelCans.splice(i, 1);
			continue;
		}
		// Toplama kontrolü
		if (checkCollision(player, f)) {
			// Yakıtı artır, maksimumu geçmesin
			fuel += FUELCAN_AMOUNT;
			if (fuel > FUEL_MAX) fuel = FUEL_MAX;
			// Görsel efekt: fuel barı beyaza flashla
			LK.effects.flashObject(fuelBar, 0xffffff, 200);
			f.destroy();
			fuelCans.splice(i, 1);
			continue;
		}
	}
	// Nitro etkisi
	if (nitroActive) {
		nitroTimer--;
		if (nitroTimer > 0) {
			// Hızlı ilerle: yol, ağaçlar, düşmanlar, chaserCar daha hızlı hareket eder
			for (var i = 0; i < roadLines.length; i++) roadLines[i].y += playerSpeedBoost;
			for (var i = 0; i < leftTrees.length; i++) leftTrees[i].y += playerSpeedBoost;
			for (var i = 0; i < rightTrees.length; i++) rightTrees[i].y += playerSpeedBoost;
			for (var i = 0; i < leftTreeZones.length; i++) leftTreeZones[i].y += playerSpeedBoost;
			for (var i = 0; i < rightTreeZones.length; i++) rightTreeZones[i].y += playerSpeedBoost;
			for (var i = 0; i < enemyCars.length; i++) enemyCars[i].y += playerSpeedBoost;
			chaserCar.y += playerSpeedBoost * 0.7;
			// Araba kadrajdan çıkmasın: player.y görsel olarak ileri kayarken sınırla
			var playerVisualMove = playerSpeedBoost * 0.5;
			var playerMinY = 300 + player.height / 2; // Üst sınır (ekranda kalacak şekilde)
			var playerMaxY = GAME_HEIGHT - 500; // Alt sınır (başlangıç pozisyonu)
			var newPlayerY = player.y + playerVisualMove;
			if (newPlayerY < playerMinY) {
				player.y = playerMinY;
			} else if (newPlayerY > playerMaxY) {
				player.y = playerMaxY;
			} else {
				player.y = newPlayerY;
			}
			distance += Math.floor(playerSpeedBoost * 0.7);
		} else {
			nitroActive = false;
			playerSpeedBoost = 0;
		}
	} else {
		// Nitro aktif değilse hiçbir blur overlay kodu çalışmasın
	}
	// Yeni engel oluştur
	enemySpawnTick++;
	var currentSpawnInterval = getEnemySpawnInterval();
	if (enemySpawnTick >= currentSpawnInterval) {
		enemySpawnTick = 0;
		// Rastgele bir veya iki şeride engel koy
		var lanes = [0, 1, 2, 3];
		// %60 tek araba, %40 iki araba
		var count = Math.random() < 0.6 ? 1 : 2;
		for (var j = 0; j < count; j++) {
			if (lanes.length === 0) break;
			var idx = Math.floor(Math.random() * lanes.length);
			var lane = lanes[idx];
			lanes.splice(idx, 1);
			var enemy = new EnemyCar();
			enemy.x = LANE_X[lane];
			// Soldaki iki şerit (0 ve 1) için de aşağı doğru giden araba oluştur
			enemy.y = -200;
			enemy.direction = 1; // Aşağı hareket
			game.addChild(enemy);
			enemyCars.push(enemy);
		}
	}
};
// Oyun yeniden başlatıldığında sıfırla
game.on('reset', function () {
	// Arabaları ve çizgileri sil
	for (var i = 0; i < enemyCars.length; i++) {
		enemyCars[i].destroy();
	}
	enemyCars = [];
	// Nitro'ları sil
	for (var i = 0; i < nitros.length; i++) {
		nitros[i].destroy();
	}
	nitros = [];
	// ChaserCar'ı sıfırla
	chaserCar.x = player.x;
	chaserCar.y = GAME_HEIGHT + 400;
	chaserCar.targetY = player.y + 600;
	nitroActive = false;
	nitroTimer = 0;
	playerSpeedBoost = 0;
	distance = 0;
	scoreTxt.setText('0');
	isGameOver = false;
	player.lane = 1;
	player.x = LANE_X[1];
	player.y = GAME_HEIGHT - 500;
	updateHighScore();
	// --- Reset fuel ---
	fuel = FUEL_MAX;
	fuelBar.width = fuelBarWidth;
	// Menüye geri dön
	isMenu = true;
	isCarSelect = false;
	if (menuOverlay) menuOverlay.visible = true;
	// Reset car selection to default
	selectedPlayerCarAsset = 'playerCar';
	selectedEnemyCarAssets = [];
	// Müzik başlat (menüde)
});
:quality(85)/https://cdn.frvr.ai/6837657eac4cf3f383035dd9.png%3F3) 
 Peugeot pars arkasi ama yukaridan. In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/683765edac4cf3f383035de8.png%3F3) 
 Bmw e60 arkasi ama yukaridan. In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/6837664aac4cf3f383035df4.png%3F3) 
 Renault l90 arkasi ama yukaridan. In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/68376a53ac4cf3f383035e27.png%3F3) 
 Gri Dodge challenger 2014 arkasi ama yukaridan. In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/68376adaac4cf3f383035e3d.png%3F3) 
 Beyaz Peugeot 405 arkasi ama yukaridan. In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/68376bd9ac4cf3f383035e55.png%3F3) 
 Kirmizi Irankhodro samand arkasi ama yukaridan. In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/68376c41ac4cf3f383035e6e.png%3F3) 
 Beyaz saipa pride 131 arkasi ama yukaridan. In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/68376cbfac4cf3f383035e7b.png%3F3) 
 Turuncu mazda rx7 arkasi ama yukaridan In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/68376cfbac4cf3f383035e85.png%3F3) 
 Cheverleot camaro ss arkasi ama yukaridan In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/68376d4bac4cf3f383035e91.png%3F3) 
 Yeni porche 911 arkasi ama yukaridan In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/68376d8aac4cf3f383035e9d.png%3F3) 
 Yeni ford mustang arkasi ama yukaridan In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/68376dcaac4cf3f383035ea6.png%3F3) 
 Citroen xantia arkasi ama yukaridan In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/68376e05ac4cf3f383035eb3.png%3F3) 
 Zamyad neysan arkasi ama yukaridan In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/68376f44ac4cf3f383035ec8.png%3F3) 
 Lambirghini aventador arkasi ama yukaridan In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/68376f87ac4cf3f383035ed2.png%3F3) 
 Gri mercedes benz cls arkasi ama yukaridan In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/68376fd6ac4cf3f383035edf.png%3F3) 
 Acik mavi Bmw m4 arkasi ama yukaridan In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/683831e28594b895bc0c22b5.png%3F3) 
 Usntunde play yazan araba temali mavi bir dugme. In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/683833c98594b895bc0c22dd.png%3F3) 
 Car yazili araba temali turuncu ve daire bir dugme. In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/68383a498594b895bc0c232b.png%3F3) 
 Mavi ve asiri Spor olarak ozellestirilmis bir peugeot 206 arkasi ama yukaridan. In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/683840a38594b895bc0c23a7.png%3F3) 
 Tam olarak yukaridan gorunen seritsiz duz bir yol. In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/6838418e8594b895bc0c23c9.png%3F3) 
 Modern sokak lambasi. In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/68420852081b5ea5dd91525a.png%3F3) 
 Nitro. In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/6846cc5ac6f337de68a79e37.png%3F3) 
 Kirmizi benzin bidonu. In-Game asset. 2d. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/6846d0ddc6f337de68a79e55.png%3F3) 
 Altinda arka plansiz "very little gasoline" yazan kirmizi ünlem isareti. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat