User prompt
Please fix the bug: 'Uncaught Error: [object Object]addChildAt: The index 1 supplied is out of bounds 0' in or related to this line: 'game.addChildAt(background, 1);' Line Number: 176
User prompt
background shoudl be behing top and bottom backgorund
User prompt
add background to the game
Code edit (1 edits merged)
Please save this source code
User prompt
allign the items in the bottom of the screen, depending on how many they are. they should always be centered
User prompt
make sure all customers have at least 1 item on their order
User prompt
when all orders of a level are complete, move to next level
User prompt
make sure customers oreder only have items available in that level
Code edit (1 edits merged)
Please save this source code
User prompt
add a level structure ot the game. each level will have a different number of customers and items. this will be configurable in the code.
User prompt
customers should always have a shrkinking and expanding effect
Code edit (2 edits merged)
Please save this source code
User prompt
add level on the top rright of the screen
User prompt
make sure order bubble final alpha is full
User prompt
add fade in effect for order bubble
User prompt
remvoe gaugebar from game
User prompt
while moving, hide customers gauge bar and bubble
User prompt
decrease the speed of customers in half
User prompt
customers should come from outsiede the screen moving until they reach their positon
User prompt
customers should actually come from outside of the screen, moving, until they reach their position
User prompt
add small up and down movement to the customers
User prompt
if customer only as 1 item in the order, allig the icon in the bubble to be in the ccener
Code edit (1 edits merged)
Please save this source code
User prompt
make sure customers are not spawend on the side 10% of the screen
Code edit (3 edits merged)
Please save this source code
/****
* Classes
****/
// Customer class
var Customer = Container.expand(function () {
var self = Container.call(this);
var customerGraphics = self.attachAsset('customer', {
anchorX: 0.5,
anchorY: 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 () {};
}
};
};
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
});
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;
}
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;
}
} else {
self.orderAsset = self.attachAsset(order, {
anchorX: 0.5,
anchorY: 0.5
});
self.orderAsset.x = 0;
}
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB // Init game with sky blue background
});
/****
* Game Code
****/
// 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: 150,
fill: "#ffffff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var levelTxt = new Text2('LVL 1', {
size: 100,
fill: "#ffffff"
});
levelTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(levelTxt);
// 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
score += 10;
scoreTxt.setText(score);
}
}
// Function to create a new customer
function createCustomer() {
if (customers.length >= currentLevel.customerCount) {
return;
}
var customer = new Customer();
var safeDistance = 350; // 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);
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 = 200;
item.height = 200;
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, 5, ['towel', 'umbrella']), new Level(2, 7, ['towel', 'umbrella', 'refreshment']), new Level(3, 10, ['towel', 'umbrella'])
// Add more levels as needed
];
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);
// 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) {
currentLevel = levels[nextLevelIndex];
// 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 startingPoint = (2048 - totalItems * 250) / 2;
for (var i = 0; i < totalItems; i++) {
createItem(currentLevel.items[i], startingPoint + i * 250, 2732 - 200);
}
}
} else if (LK.ticks % 300 == 0) {
createCustomer();
}
};
// Create initial items
for (var i = 0; i < currentLevel.items.length; i++) {
createItem(currentLevel.items[i], 2048 / 2 - 500 + i * 250, 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); ===================================================================
--- original.js
+++ change.js
@@ -281,10 +281,12 @@
// Create new customers and items for the next level
for (var i = 0; i < currentLevel.customerCount; i++) {
createCustomer();
}
- for (var i = 0; i < currentLevel.items.length; i++) {
- createItem(currentLevel.items[i], 2048 / 2 - 500 + i * 250, 2732 - 200);
+ var totalItems = currentLevel.items.length;
+ var startingPoint = (2048 - totalItems * 250) / 2;
+ for (var i = 0; i < totalItems; i++) {
+ createItem(currentLevel.items[i], startingPoint + i * 250, 2732 - 200);
}
}
} else if (LK.ticks % 300 == 0) {
createCustomer();
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.