User prompt
play nextlevel sound when levelup asset is displayed
User prompt
play ordercomplete when an order is complete
User prompt
play tap sound when player taps on item or cusotmer
User prompt
play next level when level is complete
Code edit (1 edits merged)
Please save this source code
User prompt
show levelup asset when a level is complete
User prompt
show level up asset when level up happens.
User prompt
time countdown and gaugebar should start descending once all customers reach their final position
User prompt
make gaugebar colors softer
User prompt
reset gaugebar on new level
Code edit (2 edits merged)
Please save this source code
User prompt
make gaugebar change tints. between 100% and 70% green. beween 69% and 20% yellow. under 20% red.
Code edit (1 edits merged)
Please save this source code
User prompt
move gaugebar 200 pixels down
User prompt
move gaugebar 10 pixels higher
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'height')' in or related to this line: 'var gaugeBar = LK.getAsset('gaugeBar', {' Line Number: 200
User prompt
move gaugebar below the topborder
User prompt
make gaugebar image size decreasion smooother
User prompt
To ensure the `gaugeBar` is visible, it should be added to the game after the background assets, so it is rendered on top of them.
User prompt
show gaugebar in the center of the screen
User prompt
add a gauge bar that represent the timer countdown
User prompt
prevent blinkk of items in the bottom every level
User prompt
for customer, use a random asset from customer, customer2, customer3 or customer4
User prompt
timer should start in 20 seconds
User prompt
move level to the left corner and in the right put a timer. each level will have a timer countdown
/****
* Classes
****/
// Customer class
var Customer = Container.expand(function () {
var self = Container.call(this);
var customerGraphics = self.attachAsset('customer', {
anchorX: 0.5,
anchorY: 0.5
});
var shadow = self.attachAsset('shadow', {
anchorX: 0.5,
anchorY: 0
});
shadow.y = customerGraphics.height / 2;
shadow.alpha = 0.5;
self.orderBubble = null;
self.gaugeBar = null;
self.moveToPosition = function (x, y) {
var distance = Math.sqrt(Math.pow(self.x - x, 2) + Math.pow(self.y - y, 2));
var speed = distance / 120; // 60 frames per second
var dx = (x - self.x) / distance * speed;
var dy = (y - self.y) / distance * speed;
self.update = function () {
if (Math.abs(self.x - x) > speed || Math.abs(self.y - y) > speed) {
self.x += dx;
self.y += dy;
self.orderBubble.visible = false;
} else {
self.x = x;
self.y = y;
self.orderBubble.alpha = 0;
LK.setTimeout(function () {
self.orderBubble.visible = true;
var fadeInInterval = LK.setInterval(function () {
if (self.orderBubble.alpha < 1) {
self.orderBubble.alpha += 0.1;
}
if (self.orderBubble.alpha >= 1) {
self.orderBubble.alpha = 1;
LK.clearInterval(fadeInInterval);
}
}, 100);
}, 500);
self.update = function () {
// Add small up and down movement to the customers
self.y += Math.sin(LK.ticks / 10) * 0.5;
shadow.y = customerGraphics.height / 2;
};
}
};
};
self.setOrder = function (order) {
if (self.orderBubble) {
self.removeChild(self.orderBubble);
}
// Filter the order to only include items available in the current level
self.order = Array.isArray(order) ? order.filter(function (item) {
return currentLevel.items.includes(item);
}) : [order];
// Ensure that all customers have at least one item in their order
if (self.order.length === 0) {
self.order.push(currentLevel.items[Math.floor(Math.random() * currentLevel.items.length)]);
}
self.orderBubble = new OrderBubble(self.order);
self.orderBubble.x = 0;
self.orderBubble.y = -self.height / 2 - self.orderBubble.height / 2;
if (!self.orderBubble.visible) {
self.orderBubble.visible = false; // Hide order bubble on game start
}
self.addChild(self.orderBubble);
self.update = function () {
// Add small up and down movement to the customers
self.y += Math.sin(LK.ticks / 10) * 0.5;
};
};
self.getOrder = function () {
return self.order;
};
self.on('down', function (x, y, obj) {
if (self.orderBubble && !self.orderBubble.visible) {
self.orderBubble.visible = true;
}
if (selectedItem && self.order.includes(selectedItem.getType())) {
// Dim the item in the order bubble
if (self.orderBubble.orderAsset1 && self.orderBubble.orderAsset1.type === selectedItem.getType()) {
self.orderBubble.orderAsset1.alpha = 0.5;
}
if (self.orderBubble.orderAsset2 && self.orderBubble.orderAsset2.type === selectedItem.getType()) {
self.orderBubble.orderAsset2.alpha = 0.5;
}
// Check if the order is fulfilled
checkOrderFulfillment(self);
}
});
});
// Item class
var Item = Container.expand(function (type) {
var self = Container.call(this);
var itemGraphics = self.attachAsset(type, {
anchorX: 0.5,
anchorY: 0.5
});
self.type = type;
self.getType = function () {
return self.type;
};
self.alpha = 0.5; // Start items as dimmed
self.on('down', function (x, y, obj) {
if (selectedItem) {
selectedItem.scaleX = 1;
selectedItem.scaleY = 1;
selectedItem.alpha = 0.5; // Dim the previously selected item
}
selectedItem = self;
console.log("Item selected:", self.type);
self.scaleX = 1.2;
self.scaleY = 1.2;
self.alpha = 1; // Undim the selected item
});
});
// OrderBubble class
var OrderBubble = Container.expand(function (order) {
var self = Container.call(this);
var bubbleGraphics = self.attachAsset('bubble', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.5 // Set transparency to 50%
});
self.order = order;
if (Array.isArray(order)) {
if (order.length > 0) {
self.orderAsset1 = self.attachAsset(order[0], {
anchorX: 0.5,
anchorY: 0.5
});
self.orderAsset1.type = order[0];
self.orderAsset1.x = order.length > 1 ? -60 : 0;
self.orderAsset1.y -= 20;
}
if (order.length > 1) {
self.orderAsset2 = self.attachAsset(order[1], {
anchorX: 0.5,
anchorY: 0.5
});
self.orderAsset2.type = order[1];
self.orderAsset2.x = 60;
self.orderAsset2.y -= 20;
}
} else {
self.orderAsset = self.attachAsset(order, {
anchorX: 0.5,
anchorY: 0.5
});
self.orderAsset.x = 0;
self.orderAsset.y -= 20;
}
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB // Init game with sky blue background
});
/****
* Game Code
****/
var background = LK.getAsset('background', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
});
game.addChild(background);
var backgroundTop = LK.getAsset('backgroundTop', {
anchorX: 0.5,
anchorY: 0,
x: 2048 / 2,
y: 0,
alpha: 0.5 // Set transparency to 50%
});
game.addChild(backgroundTop);
var backgroundBottom = LK.getAsset('backgroundBottom', {
anchorX: 0.5,
anchorY: 1,
x: 2048 / 2,
y: 2732,
alpha: 0.5 // Set transparency to 50%
});
game.addChild(backgroundBottom);
// Level class
//<Assets used in the game will automatically appear here>
// Initialize arrays and variables
var Level = function Level(levelNumber, customerCount, items) {
this.levelNumber = levelNumber;
this.customerCount = customerCount;
this.items = items;
};
var selectedItem = null; // Variable to track the currently selected item
var currentLevel = null; // Variable to track the current level
var customers = [];
var items = [];
var inventory = []; // Inventory array to hold all items from the bar
var score = 0;
var scoreTxt = new Text2('0', {
size: 90,
fill: "#ffffff",
stroke: "#000000",
strokeThickness: 5
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var levelTxt = new Text2('LVL 1', {
size: 80,
fill: "#ffffff",
stroke: "#000000",
strokeThickness: 5
});
levelTxt.anchor.set(0, 0);
LK.gui.topLeft.addChild(levelTxt);
var timerTxt = new Text2('Time: 60', {
size: 80,
fill: "#ffffff",
stroke: "#000000",
strokeThickness: 5
});
timerTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(timerTxt);
// Function to check if all items of an order are delivered
function checkOrderFulfillment(customer) {
// Check if all items are dimmed
var allDimmed = true;
if (customer.orderBubble.orderAsset1 && customer.orderBubble.orderAsset1.alpha === 1) {
allDimmed = false;
}
if (customer.orderBubble.orderAsset2 && customer.orderBubble.orderAsset2.alpha === 1) {
allDimmed = false;
}
if (allDimmed) {
// Increase score only if it hasn't been increased for this customer
if (!customer.scoreAdded) {
score += 10;
scoreTxt.setText(score);
customer.scoreAdded = true; // Mark that score has been added for this customer
}
// Spin the customer on its axis
var spinInterval = LK.setInterval(function () {
customer.rotation += 0.1;
}, 16.67); // Approximately 60 FPS
// Wait for one second and then destroy the customer and order bubble
LK.setTimeout(function () {
LK.clearInterval(spinInterval);
customer.destroy();
customer.orderBubble.destroy();
}, 1000);
}
}
// Function to create a new customer
function createCustomer() {
if (customers.length >= currentLevel.customerCount) {
return;
}
var customer = new Customer();
var safeDistance = 500; // Minimum distance between customers
var validPosition = false;
while (!validPosition) {
customer.x = Math.random() * (2048 * 0.8) + 2048 * 0.1; // Spawn customers within the middle 80% of the screen
customer.y = Math.random() * (2200 - 646.4) + 646.4;
validPosition = true;
for (var i = 0; i < customers.length; i++) {
var distance = Math.sqrt(Math.pow(customers[i].x - customer.x, 2) + Math.pow(customers[i].y - customer.y, 2));
if (distance < safeDistance) {
validPosition = false;
break;
}
}
}
var order = ['towel', 'umbrella', 'refreshment', 'snack'].sort(function () {
return 0.5 - Math.random();
}).slice(0, Math.floor(Math.random() * 2) + 1);
customer.setOrder(order);
customers.push(customer);
customer.rotation = 0;
game.addChild(customer);
customer.x = Math.random() < 0.5 ? -200 : 2048 + 200; // Spawn customers from left or right side of the screen
customer.y = Math.random() * (2200 - 646.4) + 646.4;
customer.moveToPosition(Math.random() * (2048 * 0.8) + 2048 * 0.1, Math.random() * (2200 - 646.4) + 646.4);
}
// Function to create a new item
function createItem(type, x, y) {
if (!currentLevel.items.includes(type)) {
return;
}
var item = new Item(type);
item.x = x;
item.y = y;
item.width = 260; // Increase width by 30%
item.height = 260; // Increase height by 30%
items.push(item);
inventory.push(item); // Add item to inventory array
item.visible = true; // Show item on game start
game.addChild(item);
}
// Initialize level data
var levels = [new Level(1, 3, ['towel', 'umbrella']), new Level(2, 4, ['towel', 'umbrella', 'refreshment']), new Level(3, 5, ['towel', 'umbrella', 'snack']), new Level(4, 6, ['towel', 'umbrella', 'refreshment', 'snack']), new Level(5, 7, ['towel', 'umbrella', 'refreshment', 'snack']), new Level(6, 8, ['towel', 'umbrella', 'refreshment', 'snack']), new Level(7, 9, ['towel', 'umbrella', 'refreshment', 'snack'])];
currentLevel = levels[0];
// Create initial customers
for (var i = 0; i < currentLevel.customerCount; i++) {
createCustomer();
}
// Update function
game.update = function () {
levelTxt.setText('LVL ' + currentLevel.levelNumber);
// Timer countdown logic
if (!game.startTime) {
game.startTime = Date.now();
}
var elapsedTime = Math.floor((Date.now() - game.startTime) / 1000);
var remainingTime = 60 - elapsedTime;
timerTxt.setText('Time: ' + remainingTime);
if (remainingTime <= 0) {
LK.showGameOver();
return;
}
// Check if all orders are fulfilled
var allOrdersFulfilled = true;
for (var i = 0; i < customers.length; i++) {
if (customers[i].orderBubble.orderAsset1 && customers[i].orderBubble.orderAsset1.alpha === 1) {
allOrdersFulfilled = false;
break;
}
if (customers[i].orderBubble.orderAsset2 && customers[i].orderBubble.orderAsset2.alpha === 1) {
allOrdersFulfilled = false;
break;
}
}
// If all orders are fulfilled, move to the next level
if (allOrdersFulfilled) {
var nextLevelIndex = levels.indexOf(currentLevel) + 1;
if (nextLevelIndex < levels.length) {
LK.setTimeout(function () {
currentLevel = levels[nextLevelIndex];
// Reset timer for the new level
game.startTime = Date.now();
// Clear current customers and items
for (var i = 0; i < customers.length; i++) {
customers[i].destroy();
}
customers = [];
for (var i = 0; i < items.length; i++) {
items[i].destroy();
}
items = [];
// Create new customers and items for the next level
for (var i = 0; i < currentLevel.customerCount; i++) {
createCustomer();
}
var totalItems = currentLevel.items.length;
var totalItems = currentLevel.items.length;
var spacing = (2048 - totalItems * 260) / (totalItems + 1);
for (var i = 0; i < totalItems; i++) {
createItem(currentLevel.items[i], spacing + i * (260 + spacing) + 130, 2732 - 200);
}
}, 1000);
}
} else if (LK.ticks % 300 == 0) {
createCustomer();
}
};
// Create initial items
var totalItems = currentLevel.items.length;
var spacing = (2048 - totalItems * 260) / (totalItems + 1);
for (var i = 0; i < totalItems; i++) {
createItem(currentLevel.items[i], spacing + i * (260 + spacing) + 130, 2732 - 200);
}
var backgroundBottom = LK.getAsset('backgroundBottom', {
anchorX: 0.5,
anchorY: 1,
x: 2048 / 2,
y: 2732
});
game.addChildAt(backgroundBottom, 0);
var backgroundTop = LK.getAsset('backgroundTop', {
anchorX: 0.5,
anchorY: 0,
x: 2048 / 2,
y: 0
});
game.addChildAt(backgroundTop, 0);
8bit. cartoon. icecream. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
cartoon and 8 bit message. reads: Time's Up!. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
8bit. cartoon. palm tree.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.