/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Car = Container.expand(function (carType, price) {
var self = Container.call(this);
self.carType = carType || 'car';
self.price = price || 1000;
self.speed = 0;
self.maxSpeed = 8;
self.acceleration = 0.3;
self.rotation = 0;
self.isPlayer = false;
var carGraphics = self.attachAsset(self.carType, {
anchorX: 0.5,
anchorY: 0.5
});
self.accelerate = function () {
if (self.speed < self.maxSpeed) {
self.speed += self.acceleration;
}
};
self.brake = function () {
if (self.speed > 0) {
self.speed -= self.acceleration * 2;
}
if (self.speed < 0) {
self.speed = 0;
}
};
self.drift = function () {
if (self.speed > 2) {
LK.getSound('drift').play();
LK.effects.flashObject(self, 0xffff00, 500);
}
};
self.update = function () {
if (self.isPlayer) {
var moveX = Math.cos(self.rotation) * self.speed;
var moveY = Math.sin(self.rotation) * self.speed;
self.x += moveX;
self.y += moveY;
// Keep car on screen
if (self.x < 60) {
self.x = 60;
}
if (self.x > 1988) {
self.x = 1988;
}
if (self.y < 60) {
self.y = 60;
}
if (self.y > 2672) {
self.y = 2672;
}
// Natural slowdown
if (self.speed > 0) {
self.speed -= 0.05;
}
if (self.speed < 0) {
self.speed = 0;
}
}
};
return self;
});
var CarDealer = Container.expand(function () {
var self = Container.call(this);
self.cars = [{
type: 'bmw',
name: 'BMW M3',
price: 5000
}, {
type: 'mercedes',
name: 'Mercedes AMG',
price: 7000
}, {
type: 'audi',
name: 'Audi R8',
price: 9000
}, {
type: 'car',
name: 'Basic Car',
price: 1000
}];
var dealerBg = self.attachAsset('dealership', {
anchorX: 0.5,
anchorY: 0.5
});
var titleText = new Text2('Car Dealership', {
size: 60,
fill: '#ffffff'
});
titleText.anchor.set(0.5, 0);
titleText.x = 0;
titleText.y = -280;
self.addChild(titleText);
self.showCars = function () {
for (var i = 0; i < self.cars.length; i++) {
var carData = self.cars[i];
var carSlot = new Container();
var slotBg = carSlot.attachAsset('carSlot', {
anchorX: 0.5,
anchorY: 0.5
});
var carPreview = carSlot.attachAsset(carData.type, {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.7,
scaleY: 0.7
});
var priceText = new Text2('$' + carData.price, {
size: 30,
fill: '#00ff00'
});
priceText.anchor.set(0.5, 0);
priceText.y = 35;
carSlot.addChild(priceText);
carSlot.x = i % 2 * 200 - 100;
carSlot.y = Math.floor(i / 2) * 120 - 100;
carSlot.carData = carData;
carSlot.down = function (x, y, obj) {
buyCar(this.carData);
};
self.addChild(carSlot);
}
};
return self;
});
var Server = Container.expand(function (name, hasPassword) {
var self = Container.call(this);
self.serverName = name || 'My Server';
self.hasPassword = hasPassword || false;
self.players = [];
var serverBg = self.attachAsset('serverButton', {
anchorX: 0,
anchorY: 0
});
var nameText = new Text2(self.serverName, {
size: 40,
fill: '#ffffff'
});
nameText.anchor.set(0.5, 0.5);
nameText.x = 150;
nameText.y = 40;
self.addChild(nameText);
self.down = function (x, y, obj) {
joinServer(self);
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a1a
});
/****
* Game Code
****/
// Game state
var gameState = 'menu'; // menu, server, garage, dealership, driving
var currentServer = null;
var playerCar = null;
var ownedCars = storage.ownedCars || [];
var playerMoney = storage.playerMoney || 10000;
var servers = [];
// Initialize storage defaults
if (!storage.ownedCars) {
storage.ownedCars = [{
type: 'car',
name: 'Starter Car'
}];
ownedCars = storage.ownedCars;
}
// UI Elements
var moneyDisplay = new Text2('Money: $' + playerMoney, {
size: 50,
fill: '#00ff00'
});
moneyDisplay.anchor.set(1, 0);
LK.gui.topRight.addChild(moneyDisplay);
var stateDisplay = new Text2('Main Menu', {
size: 40,
fill: '#ffffff'
});
stateDisplay.anchor.set(0.5, 0);
LK.gui.top.addChild(stateDisplay);
// Game elements
var road = game.addChild(LK.getAsset('road', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366
}));
var track = game.addChild(LK.getAsset('track', {
anchorX: 0.5,
anchorY: 0.5,
x: 1600,
y: 500
}));
// Menu buttons
var createServerBtn = game.addChild(LK.getAsset('serverButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 800
}));
var createServerText = new Text2('Create Server', {
size: 40,
fill: '#ffffff'
});
createServerText.anchor.set(0.5, 0.5);
createServerBtn.addChild(createServerText);
var garageBtn = game.addChild(LK.getAsset('serverButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 920
}));
var garageText = new Text2('Garage', {
size: 40,
fill: '#ffffff'
});
garageText.anchor.set(0.5, 0.5);
garageBtn.addChild(garageText);
var dealershipBtn = game.addChild(LK.getAsset('serverButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1040
}));
var dealershipText = new Text2('Car Dealership', {
size: 40,
fill: '#ffffff'
});
dealershipText.anchor.set(0.5, 0.5);
dealershipBtn.addChild(dealershipText);
// Initialize some demo servers
for (var i = 0; i < 3; i++) {
var server = new Server('Server ' + (i + 1), i === 0);
server.x = 400;
server.y = 600 + i * 100;
servers.push(server);
game.addChild(server);
}
var dealer = new CarDealer();
dealer.x = 1024;
dealer.y = 1366;
dealer.visible = false;
game.addChild(dealer);
// Functions
function updateMoneyDisplay() {
moneyDisplay.setText('Money: $' + playerMoney);
storage.playerMoney = playerMoney;
}
function buyCar(carData) {
if (playerMoney >= carData.price) {
playerMoney -= carData.price;
ownedCars.push(carData);
storage.ownedCars = ownedCars;
updateMoneyDisplay();
LK.effects.flashScreen(0x00ff00, 500);
} else {
LK.effects.flashScreen(0xff0000, 500);
}
}
function showGarage() {
gameState = 'garage';
stateDisplay.setText('Garage');
hideAllMenus();
for (var i = 0; i < ownedCars.length; i++) {
var carData = ownedCars[i];
var garageCar = new Car(carData.type, carData.price);
garageCar.x = 300 + i % 3 * 200;
garageCar.y = 800 + Math.floor(i / 3) * 150;
garageCar.down = function (x, y, obj) {
selectCar(this);
};
game.addChild(garageCar);
}
}
function selectCar(car) {
if (playerCar) {
playerCar.destroy();
}
playerCar = new Car(car.carType, car.price);
playerCar.x = 1024;
playerCar.y = 1200;
playerCar.isPlayer = true;
game.addChild(playerCar);
gameState = 'driving';
stateDisplay.setText('Driving');
hideAllMenus();
LK.playMusic('cityTrack');
}
function joinServer(server) {
currentServer = server;
gameState = 'server';
stateDisplay.setText('Server: ' + server.serverName);
hideAllMenus();
if (!playerCar && ownedCars.length > 0) {
playerCar = new Car(ownedCars[0].type, ownedCars[0].price);
playerCar.x = 1024;
playerCar.y = 1200;
playerCar.isPlayer = true;
game.addChild(playerCar);
}
}
function hideAllMenus() {
createServerBtn.visible = false;
garageBtn.visible = false;
dealershipBtn.visible = false;
dealer.visible = false;
for (var i = 0; i < servers.length; i++) {
servers[i].visible = false;
}
}
function showMainMenu() {
gameState = 'menu';
stateDisplay.setText('Main Menu');
createServerBtn.visible = true;
garageBtn.visible = true;
dealershipBtn.visible = true;
dealer.visible = false;
for (var i = 0; i < servers.length; i++) {
servers[i].visible = true;
}
// Clear garage cars
var children = game.children.slice();
for (var j = 0; j < children.length; j++) {
if (children[j] instanceof Car && !children[j].isPlayer) {
children[j].destroy();
}
}
}
// Event handlers
createServerBtn.down = function (x, y, obj) {
var newServer = new Server('My Server', false);
newServer.x = 400;
newServer.y = 600 + servers.length * 100;
servers.push(newServer);
game.addChild(newServer);
joinServer(newServer);
};
garageBtn.down = function (x, y, obj) {
showGarage();
};
dealershipBtn.down = function (x, y, obj) {
gameState = 'dealership';
stateDisplay.setText('Car Dealership');
hideAllMenus();
dealer.visible = true;
dealer.showCars();
};
var isDragging = false;
var dragStartX = 0;
var dragStartY = 0;
game.down = function (x, y, obj) {
if (gameState === 'driving' && playerCar) {
isDragging = true;
dragStartX = x;
dragStartY = y;
LK.getSound('engine').play();
} else if (gameState !== 'menu' && gameState !== 'dealership') {
showMainMenu();
}
};
game.move = function (x, y, obj) {
if (isDragging && playerCar && gameState === 'driving') {
var deltaX = x - dragStartX;
var deltaY = y - dragStartY;
if (Math.abs(deltaX) > 20 || Math.abs(deltaY) > 20) {
playerCar.rotation = Math.atan2(deltaY, deltaX);
playerCar.accelerate();
// Drift detection
if (Math.abs(deltaX) > 50) {
playerCar.drift();
}
}
}
};
game.up = function (x, y, obj) {
if (isDragging && playerCar) {
isDragging = false;
playerCar.brake();
}
};
game.update = function () {
// Update player money earned from driving
if (gameState === 'driving' && playerCar && playerCar.speed > 3) {
if (LK.ticks % 180 === 0) {
// Every 3 seconds at 60fps
playerMoney += 10;
updateMoneyDisplay();
}
}
// Update car rotation visual
if (playerCar) {
var carGraphics = playerCar.children[0];
if (carGraphics) {
carGraphics.rotation = playerCar.rotation;
}
}
};
// Start with main menu
showMainMenu(); /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Car = Container.expand(function (carType, price) {
var self = Container.call(this);
self.carType = carType || 'car';
self.price = price || 1000;
self.speed = 0;
self.maxSpeed = 8;
self.acceleration = 0.3;
self.rotation = 0;
self.isPlayer = false;
var carGraphics = self.attachAsset(self.carType, {
anchorX: 0.5,
anchorY: 0.5
});
self.accelerate = function () {
if (self.speed < self.maxSpeed) {
self.speed += self.acceleration;
}
};
self.brake = function () {
if (self.speed > 0) {
self.speed -= self.acceleration * 2;
}
if (self.speed < 0) {
self.speed = 0;
}
};
self.drift = function () {
if (self.speed > 2) {
LK.getSound('drift').play();
LK.effects.flashObject(self, 0xffff00, 500);
}
};
self.update = function () {
if (self.isPlayer) {
var moveX = Math.cos(self.rotation) * self.speed;
var moveY = Math.sin(self.rotation) * self.speed;
self.x += moveX;
self.y += moveY;
// Keep car on screen
if (self.x < 60) {
self.x = 60;
}
if (self.x > 1988) {
self.x = 1988;
}
if (self.y < 60) {
self.y = 60;
}
if (self.y > 2672) {
self.y = 2672;
}
// Natural slowdown
if (self.speed > 0) {
self.speed -= 0.05;
}
if (self.speed < 0) {
self.speed = 0;
}
}
};
return self;
});
var CarDealer = Container.expand(function () {
var self = Container.call(this);
self.cars = [{
type: 'bmw',
name: 'BMW M3',
price: 5000
}, {
type: 'mercedes',
name: 'Mercedes AMG',
price: 7000
}, {
type: 'audi',
name: 'Audi R8',
price: 9000
}, {
type: 'car',
name: 'Basic Car',
price: 1000
}];
var dealerBg = self.attachAsset('dealership', {
anchorX: 0.5,
anchorY: 0.5
});
var titleText = new Text2('Car Dealership', {
size: 60,
fill: '#ffffff'
});
titleText.anchor.set(0.5, 0);
titleText.x = 0;
titleText.y = -280;
self.addChild(titleText);
self.showCars = function () {
for (var i = 0; i < self.cars.length; i++) {
var carData = self.cars[i];
var carSlot = new Container();
var slotBg = carSlot.attachAsset('carSlot', {
anchorX: 0.5,
anchorY: 0.5
});
var carPreview = carSlot.attachAsset(carData.type, {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.7,
scaleY: 0.7
});
var priceText = new Text2('$' + carData.price, {
size: 30,
fill: '#00ff00'
});
priceText.anchor.set(0.5, 0);
priceText.y = 35;
carSlot.addChild(priceText);
carSlot.x = i % 2 * 200 - 100;
carSlot.y = Math.floor(i / 2) * 120 - 100;
carSlot.carData = carData;
carSlot.down = function (x, y, obj) {
buyCar(this.carData);
};
self.addChild(carSlot);
}
};
return self;
});
var Server = Container.expand(function (name, hasPassword) {
var self = Container.call(this);
self.serverName = name || 'My Server';
self.hasPassword = hasPassword || false;
self.players = [];
var serverBg = self.attachAsset('serverButton', {
anchorX: 0,
anchorY: 0
});
var nameText = new Text2(self.serverName, {
size: 40,
fill: '#ffffff'
});
nameText.anchor.set(0.5, 0.5);
nameText.x = 150;
nameText.y = 40;
self.addChild(nameText);
self.down = function (x, y, obj) {
joinServer(self);
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a1a
});
/****
* Game Code
****/
// Game state
var gameState = 'menu'; // menu, server, garage, dealership, driving
var currentServer = null;
var playerCar = null;
var ownedCars = storage.ownedCars || [];
var playerMoney = storage.playerMoney || 10000;
var servers = [];
// Initialize storage defaults
if (!storage.ownedCars) {
storage.ownedCars = [{
type: 'car',
name: 'Starter Car'
}];
ownedCars = storage.ownedCars;
}
// UI Elements
var moneyDisplay = new Text2('Money: $' + playerMoney, {
size: 50,
fill: '#00ff00'
});
moneyDisplay.anchor.set(1, 0);
LK.gui.topRight.addChild(moneyDisplay);
var stateDisplay = new Text2('Main Menu', {
size: 40,
fill: '#ffffff'
});
stateDisplay.anchor.set(0.5, 0);
LK.gui.top.addChild(stateDisplay);
// Game elements
var road = game.addChild(LK.getAsset('road', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366
}));
var track = game.addChild(LK.getAsset('track', {
anchorX: 0.5,
anchorY: 0.5,
x: 1600,
y: 500
}));
// Menu buttons
var createServerBtn = game.addChild(LK.getAsset('serverButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 800
}));
var createServerText = new Text2('Create Server', {
size: 40,
fill: '#ffffff'
});
createServerText.anchor.set(0.5, 0.5);
createServerBtn.addChild(createServerText);
var garageBtn = game.addChild(LK.getAsset('serverButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 920
}));
var garageText = new Text2('Garage', {
size: 40,
fill: '#ffffff'
});
garageText.anchor.set(0.5, 0.5);
garageBtn.addChild(garageText);
var dealershipBtn = game.addChild(LK.getAsset('serverButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1040
}));
var dealershipText = new Text2('Car Dealership', {
size: 40,
fill: '#ffffff'
});
dealershipText.anchor.set(0.5, 0.5);
dealershipBtn.addChild(dealershipText);
// Initialize some demo servers
for (var i = 0; i < 3; i++) {
var server = new Server('Server ' + (i + 1), i === 0);
server.x = 400;
server.y = 600 + i * 100;
servers.push(server);
game.addChild(server);
}
var dealer = new CarDealer();
dealer.x = 1024;
dealer.y = 1366;
dealer.visible = false;
game.addChild(dealer);
// Functions
function updateMoneyDisplay() {
moneyDisplay.setText('Money: $' + playerMoney);
storage.playerMoney = playerMoney;
}
function buyCar(carData) {
if (playerMoney >= carData.price) {
playerMoney -= carData.price;
ownedCars.push(carData);
storage.ownedCars = ownedCars;
updateMoneyDisplay();
LK.effects.flashScreen(0x00ff00, 500);
} else {
LK.effects.flashScreen(0xff0000, 500);
}
}
function showGarage() {
gameState = 'garage';
stateDisplay.setText('Garage');
hideAllMenus();
for (var i = 0; i < ownedCars.length; i++) {
var carData = ownedCars[i];
var garageCar = new Car(carData.type, carData.price);
garageCar.x = 300 + i % 3 * 200;
garageCar.y = 800 + Math.floor(i / 3) * 150;
garageCar.down = function (x, y, obj) {
selectCar(this);
};
game.addChild(garageCar);
}
}
function selectCar(car) {
if (playerCar) {
playerCar.destroy();
}
playerCar = new Car(car.carType, car.price);
playerCar.x = 1024;
playerCar.y = 1200;
playerCar.isPlayer = true;
game.addChild(playerCar);
gameState = 'driving';
stateDisplay.setText('Driving');
hideAllMenus();
LK.playMusic('cityTrack');
}
function joinServer(server) {
currentServer = server;
gameState = 'server';
stateDisplay.setText('Server: ' + server.serverName);
hideAllMenus();
if (!playerCar && ownedCars.length > 0) {
playerCar = new Car(ownedCars[0].type, ownedCars[0].price);
playerCar.x = 1024;
playerCar.y = 1200;
playerCar.isPlayer = true;
game.addChild(playerCar);
}
}
function hideAllMenus() {
createServerBtn.visible = false;
garageBtn.visible = false;
dealershipBtn.visible = false;
dealer.visible = false;
for (var i = 0; i < servers.length; i++) {
servers[i].visible = false;
}
}
function showMainMenu() {
gameState = 'menu';
stateDisplay.setText('Main Menu');
createServerBtn.visible = true;
garageBtn.visible = true;
dealershipBtn.visible = true;
dealer.visible = false;
for (var i = 0; i < servers.length; i++) {
servers[i].visible = true;
}
// Clear garage cars
var children = game.children.slice();
for (var j = 0; j < children.length; j++) {
if (children[j] instanceof Car && !children[j].isPlayer) {
children[j].destroy();
}
}
}
// Event handlers
createServerBtn.down = function (x, y, obj) {
var newServer = new Server('My Server', false);
newServer.x = 400;
newServer.y = 600 + servers.length * 100;
servers.push(newServer);
game.addChild(newServer);
joinServer(newServer);
};
garageBtn.down = function (x, y, obj) {
showGarage();
};
dealershipBtn.down = function (x, y, obj) {
gameState = 'dealership';
stateDisplay.setText('Car Dealership');
hideAllMenus();
dealer.visible = true;
dealer.showCars();
};
var isDragging = false;
var dragStartX = 0;
var dragStartY = 0;
game.down = function (x, y, obj) {
if (gameState === 'driving' && playerCar) {
isDragging = true;
dragStartX = x;
dragStartY = y;
LK.getSound('engine').play();
} else if (gameState !== 'menu' && gameState !== 'dealership') {
showMainMenu();
}
};
game.move = function (x, y, obj) {
if (isDragging && playerCar && gameState === 'driving') {
var deltaX = x - dragStartX;
var deltaY = y - dragStartY;
if (Math.abs(deltaX) > 20 || Math.abs(deltaY) > 20) {
playerCar.rotation = Math.atan2(deltaY, deltaX);
playerCar.accelerate();
// Drift detection
if (Math.abs(deltaX) > 50) {
playerCar.drift();
}
}
}
};
game.up = function (x, y, obj) {
if (isDragging && playerCar) {
isDragging = false;
playerCar.brake();
}
};
game.update = function () {
// Update player money earned from driving
if (gameState === 'driving' && playerCar && playerCar.speed > 3) {
if (LK.ticks % 180 === 0) {
// Every 3 seconds at 60fps
playerMoney += 10;
updateMoneyDisplay();
}
}
// Update car rotation visual
if (playerCar) {
var carGraphics = playerCar.children[0];
if (carGraphics) {
carGraphics.rotation = playerCar.rotation;
}
}
};
// Start with main menu
showMainMenu();
BMW e36. In-Game asset. 2d. High contrast. No shadows
BMW M3 gtr. In-Game asset. 2d. High contrast. No shadows
Sunucu yazısi. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
GTA 5 garaj iconu. In-Game asset. 2d. High contrast. No shadows
4 şeritli beyaz aralıkli çizgili uzun yol. In-Game asset. 2d. High contrast. No shadows
Mercedes g class. In-Game asset. 2d. High contrast. No shadows
Otopark 8 slotlu. In-Game asset. 2d. High contrast. No shadows
Göz. In-Game asset. 2d. High contrast. No shadows
Araba bayisi. In-Game asset. 2d. High contrast. No shadows
Mikrofon. In-Game asset. 2d. High contrast. No shadows