/****
* Classes
****/
// Bulb class to represent the bulb on the tree
var Bulb = Container.expand(function () {
var self = Container.call(this);
var bulbGraphics = self.attachAsset('bulb', {
anchorX: 0.5,
anchorY: 0.5
});
});
// Car class to represent the car
var Car = Container.expand(function () {
var self = Container.call(this);
var carGraphics = self.attachAsset('car', {
anchorX: 0.5,
anchorY: -0.333
});
});
//<Assets used in the game will automatically appear here>
//<Write imports for supported plugins here>
// Road class to represent the road
var Road = Container.expand(function () {
var self = Container.call(this);
var roadGraphics = self.attachAsset('road', {
anchorX: 0.5,
anchorY: 0.5,
x: -50
});
self.speed = 4;
self.update = function () {
if (self.speed !== 0) {
// Only update position if speed is not zero
self.y += self.speed;
if (self.y > 2732) {
self.y = -50 / 4; // Decrease the distance between two roads to half the current distance
}
}
self.lastY = self.y; // Track last Y position for optimization
};
});
// SteeringWheel class to represent the steering wheel
var SteeringWheel = Container.expand(function () {
var self = Container.call(this);
var steeringWheelGraphics = self.attachAsset('steeringWheel', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
if (obj.target === self) {
dragNode = self; // Set the steering wheel as the node to be dragged
drifting = true; // Set the drifting variable to true
LK.playMusic('drift', {
loop: true
}); // Play the drift sound in loop
}
};
});
// Tree class to represent the pine tree
var Tree = Container.expand(function () {
var self = Container.call(this);
var treeGraphics = self.attachAsset('tree', {
anchorX: 0.5,
anchorY: 0.5
});
self.lightsOn = false;
self.speed = 4;
// Function to turn on the lights
self.turnOnLights = function () {
if (!self.lightsOn) {
self.lightsOn = true;
LK.effects.flashObject(self, 0xffff00, 1000); // Flash the tree with yellow light
}
};
self.update = function () {
if (self.speed !== 0) {
// Only update position if speed is not zero
self.y += self.speed;
if (self.y > 2732) {
self.y = -50 / 4; // Decrease the distance between two trees to half the current distance
self.lightsOn = false;
}
}
self.lastY = self.y; // Track last Y position for optimization
// Add a bulb to the tree only if the car has completed a round around the tree and the lights are not already on
if (roundCompleted && !self.lightsOn && car.y < self.y) {
// Delay the first tree by 3 seconds
LK.setTimeout(function () {
var bulb = self.addChild(new Bulb());
bulb.x = 0;
bulb.y = 0;
self.lightsOn = true; // Set the lightsOn variable to true
roundCompleted = false; // Reset the 'roundCompleted' variable
}, 3000);
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 //Init game with black background
});
/****
* Game Code
****/
game.move = function (x, y, obj) {
if (dragNode) {
var angle = Math.atan2(y - steeringWheel.y, x - steeringWheel.x); // Calculate angle between steering wheel and current mouse position
steeringWheel.rotation = angle - Math.PI / 2; // Adjust steering wheel rotation to face the drag direction correctly
}
};
var road = game.addChild(new Road());
road.x = 1024;
road.y = 1366;
var tree; // Define tree in the global scope
LK.setTimeout(function () {
tree = game.addChild(new Tree());
tree.x = 1024;
tree.y = -tree.height;
}, 2000);
// Define dragNode in the global scope
var dragNode = null;
// Define a variable to track if the car is drifting or not
var drifting = false;
// Define a variable to track if the car has completed a round around the tree
var roundCompleted = false;
// Create an instance of the car and add it to the game
var car = game.addChild(new Car());
car.x = 1024;
car.y = 1366 + 444 - 200;
// Add the steering wheel to the game
var steeringWheel = game.addChild(new SteeringWheel());
steeringWheel.x = 0 + steeringWheel.width / 2;
steeringWheel.y = 2732 - steeringWheel.height / 2;
// Update function for the game
game.update = function () {
// Syncronise the car rotation to the steeringWheel rotation if the car is drifting
if (drifting) {
car.rotation = steeringWheel.rotation;
// Check if the car has completed a round around the tree
if (tree && car.y <= tree.y + tree.height && car.y >= tree.y - tree.height && car.x <= tree.x + tree.width && car.x >= tree.x - tree.width) {
roundCompleted = true;
}
}
if (tree) {
tree.update();
}
// Collision detection between car and tree
if (car.lastWasIntersecting === false && car.intersects(tree)) {
// Handle collision event, e.g., stop the car or trigger an effect
LK.effects.flashScreen(0xff0000, 1000); // Flash screen red for 1 second
road.speed = 0; // Stop the road movement
tree.speed = 0; // Stop the tree movement
drifting = false; // Stop the car from drifting
LK.stopMusic(); // Stop the drift sound
LK.showGameOver(); // Trigger game over
}
// Update last known intersection state
car.lastWasIntersecting = car.intersects(tree);
road.update();
car.lastX = car.x; // Track last X position for optimization
car.lastY = car.y; // Track last Y position for optimization
car.lastWasIntersecting = false; // Initialize lastWasIntersecting for collision detection
};
// Event listeners for touch controls
game.down = function (x, y, obj) {
if (obj.target === handbrake) {
road.speed = 0; // Stop the road movement
tree.speed = 0; // Stop the tree movement
drifting = false; // Stop the car from drifting
LK.stopMusic(); // Stop the drift sound
road.lastY = road.y; // Track last Y position for road
tree.lastY = tree.y; // Track last Y position for tree
}
};
// Add the handbrake to the game
var handbrake = game.addChild(LK.getAsset('handbrake', {
anchorX: 0.5,
anchorY: 0.5
}));
handbrake.x = 2048 - handbrake.width / 2;
handbrake.y = 2732 - handbrake.height / 2;
game.up = function (x, y, obj) {
if (obj.target === handbrake) {
road.speed = 4; // Resume the road movement
tree.speed = 4; // Resume the tree movement
drifting = true; // Allow the car to drift again
LK.playMusic('drift', {
loop: true
}); // Play the drift sound in loop
road.lastY = road.y; // Track last Y position for road
tree.lastY = tree.y; // Track last Y position for tree
} else if (obj.target === steeringWheel) {
dragNode = null; // Stop the steering wheel rotation
}
};