User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
User prompt
Please fix the bug: 'The supplied DisplayObject must be a child of the caller' in or related to this line: 'game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1);' Line Number: 100
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ var background1 = LK.getAsset('background1', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, // Center horizontally y: 2732 / 2, // Center vertically speed: 5 // Add speed property for background1 }); // Add sign asset in front of grids var sign = LK.getAsset('Sign', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, // Center horizontally y: 2732 / 2 - 300 // Position above the center }); game.addChild(sign); var displayPriceAsset = LK.getAsset('Displayprice', { anchorX: 0.5, anchorY: 0.5, x: sign.x, y: sign.y + sign.height / 2 + 200 // Position above the middle of the sign }); game.addChild(background2); // Ensure background2 is added before setting index game.addChild(displayPriceAsset); game.setChildIndex(displayPriceAsset, game.getChildIndex(background2) + 1); var priceTextDisplay = new Text2('', { size: 50, fill: 0xFFFFFF }); priceTextDisplay.anchor.set(0.5, 0.5); priceTextDisplay.x = displayPriceAsset.x; priceTextDisplay.y = displayPriceAsset.y; game.addChild(priceTextDisplay); // Add Yes button to the sign var yesButton = LK.getAsset('Yesbutton', { anchorX: 0.5, anchorY: 0.5, x: sign.x - 200, // Position to the left of the sign center y: sign.y + 200 // Position below the sign center }); game.addChild(yesButton); // Add No button to the sign var noButton = LK.getAsset('Nobutton', { anchorX: 0.5, anchorY: 0.5, x: sign.x + 200, // Position to the right of the sign center y: sign.y + 200 // Position below the sign center }); game.addChild(noButton); // Add text 'YES' to the Yes button var yesText = new Text2('YES', { size: 90, fill: 0xFFFFFF }); yesText.anchor.set(0.5, 0.5); // Center the text on the button yesText.x = yesButton.x; yesText.y = yesButton.y; game.addChild(yesText); // Add text 'NO' to the No button var noText = new Text2('NO', { size: 90, fill: 0xFFFFFF }); noText.anchor.set(0.5, 0.5); // Center the text on the button noText.x = noButton.x; noText.y = noButton.y; game.addChild(noText); background1.dragOffset = { x: 0, y: 0 }; // Initialize dragOffset // Add drag functionality to background1 background1.down = function (x, y, obj) { this.dragging = true; this.data = obj; var newPosition = this.parent.toLocal(obj.global); this.dragOffset.x = this.x - newPosition.x; // Calculate offset this.dragOffset.y = this.y - newPosition.y; // Calculate offset }; background1.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); var deltaX = newPosition.x + this.dragOffset.x - this.x; // Calculate deltaX var deltaY = newPosition.y + this.dragOffset.y - this.y; // Calculate deltaY this.x += deltaX; // Update position this.y += deltaY; // Update position button2Text.x -= deltaX; // Prevent button2Text from moving button2Text.y -= deltaY; // Prevent button2Text from moving button1Text.x -= deltaX; // Prevent button1Text from moving button1Text.y -= deltaY; // Prevent button1Text from moving scoreText.x -= deltaX; // Prevent scoreText from moving scoreText.y -= deltaY; // Prevent scoreText from moving scoreWall.x -= deltaX; // Prevent scoreWall from moving scoreWall.y -= deltaY; // Prevent scoreWall from moving coinIcon.x -= deltaX; // Prevent coinIcon from moving coinIcon.y -= deltaY; // Prevent coinIcon from moving sign.x -= deltaX; // Prevent sign from moving sign.y -= deltaY; // Prevent sign from moving displayPriceAsset.x -= deltaX; // Prevent displayPriceAsset from moving displayPriceAsset.y -= deltaY; // Prevent displayPriceAsset from moving yesButton.x -= deltaX; // Prevent yesButton from moving yesButton.y -= deltaY; // Prevent yesButton from moving noButton.x -= deltaX; // Prevent noButton from moving noButton.y -= deltaY; // Prevent noButton from moving yesText.x -= deltaX; // Prevent yesText from moving yesText.y -= deltaY; // Prevent yesText from moving noText.x -= deltaX; // Prevent noText from moving noText.y -= deltaY; // Prevent noText from moving // Sync grid movement directly with background1 game.children.forEach(function (child) { if (child !== background1 && child !== buildAsset && child !== button1Asset && child !== button2Asset && child !== background2 && child !== background3 && child !== scrollbar && child !== scrollbutton && child !== scrollbutton3 && child !== scrollbar3) { child.x += deltaX; // Move grid with the same delta as background1 child.y += deltaY; // Move grid with the same delta as background1 } }); } }; background1.up = function () { this.dragging = false; this.data = null; // Removed timer text addition and positioning from background1 }; var gridSize = 200; var gridSpacing = 0.5; var gridCount = 10; var totalGrids = 100; var startX = 2048 / 2 - (gridSize + gridSpacing) * (gridCount - 1) / 2; var startY = 2732 / 2 - (gridSize + gridSpacing) * (gridCount - 1) / 2; for (var j = 0; j < totalGrids / gridCount; j++) { for (var i = 0; i < gridCount; i++) { var grid = LK.getAsset('Grid', { anchorX: 0.5, anchorY: 0.5, x: startX + i * (gridSize + gridSpacing), y: startY + j * (gridSize + gridSpacing), speed: 5 }); game.addChild(grid); } } game.addChildAt(background1, 0); game.children.forEach(function (child) { if (child.assetId === 'Grid') { game.setChildIndex(child, game.children.length - 1); } }); var scrollbar = LK.getAsset('scrollbar', { anchorX: 1.0, anchorY: 0.0, x: 2048, y: 0, visible: false // Initially hidden }); var scrollbutton = LK.getAsset('scrollbutton', { anchorX: 1.0, anchorY: 0.5, x: 2048, y: 0, visible: false // Initially hidden }); game.addChildAt(background1, 0); var background2 = LK.getAsset('background2', { anchorX: 0.0, anchorY: 0.0, x: 0, y: 0, speed: 10, // Speed property for background2 visible: false // Initially hidden }); game.addChildAt(sign, game.children.length); game.addChildAt(yesButton, game.children.length); game.addChildAt(noButton, game.children.length); game.addChildAt(yesText, game.children.length); game.addChildAt(noText, game.children.length); game.addChildAt(background2, game.children.length); game.addChild(scrollbar); game.addChild(scrollbutton); background2.children.forEach(function (child) { return child.visible = false; }); var background3 = LK.getAsset('background3', { anchorX: 0.0, anchorY: 0.0, x: 0, y: 0, speed: 10, // Speed property for background3 visible: false // Initially hidden }); game.children.forEach(function (child) { if (child.assetId === 'Grid') { game.setChildIndex(child, game.children.length - 1); } }); game.addChildAt(background3, game.children.length); background3.children.forEach(function (child) { return child.visible = false; }); var scrollbar3 = LK.getAsset('scrollbar', { anchorX: 1.0, anchorY: 0.0, x: 2048, y: 0, visible: false // Initially hidden }); game.addChild(scrollbar3); var scrollbutton3 = LK.getAsset('scrollbutton', { anchorX: 1.0, anchorY: 0.5, x: 2048, y: 0, visible: false // Initially hidden }); game.addChild(scrollbutton3); var slotSpacing3 = 50; // Define the space between slots for background3 for (var i = 0; i < 4; i++) { var slot3 = LK.getAsset('Slot', { anchorX: 0.5, anchorY: 0.5, x: i * (slotSpacing3 + 450) + slotSpacing3 + 200, y: 300 // Arbitrary y position }); background3.addChildAt(slot3, background3.children.length); // Add pricewall below each slot var pricewall3 = LK.getAsset('pricewall', { anchorX: 0.5, anchorY: 0.0, x: slot3.x, y: slot3.y + slot3.height / 2 + 0 // Position below the slot }); background3.addChild(pricewall3); // Add trees to the slots of background3 if (i === 0) { var tree1 = LK.getAsset('tree1', { anchorX: 0.5, anchorY: 0.5, x: slot3.x, y: slot3.y }); background3.addChild(tree1); // Add pricetext below tree1 var priceTextTree1 = new Text2('200AD', { size: 70, fill: 0xFFFFFF }); priceTextTree1.anchor.set(0.5, 0); priceTextTree1.x = slot3.x; priceTextTree1.y = slot3.y + slot3.height / 2; background3.addChild(priceTextTree1); tree1.down = function (x, y, obj) { priceTextDisplay.setText('200AD'); // Display price in the new asset var duplicate = LK.getAsset('tree1', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); // Add timer text above the placed tree if (!duplicate.timerText) { duplicate.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); duplicate.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChildAt(duplicate.timerText, game.getChildIndex(background2)); } duplicate.timerText.x = duplicate.x; duplicate.timerText.y = duplicate.y - duplicate.height / 2 - 10; // Position above the tree duplicate.dragging = true; duplicate.data = obj; // Hide background3 and its components background3.visible = false; scrollbar3.visible = false; scrollbutton3.visible = false; background3.children.forEach(function (child) { child.visible = false; }); game.children.forEach(function (child) { if (child.assetId === 'Grid') { child.visible = true; } }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } // Add timer text above the placed tree if (!this.timerText) { this.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); this.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChild(this.timerText); } this.timerText.x = this.x; this.timerText.y = this.y - this.height / 2 - 10; // Position above the tree // Start countdown this.countdown = 30; // 30 seconds if (this.countdownInterval) { LK.clearInterval(this.countdownInterval); } this.countdownInterval = LK.setInterval(function () { this.countdown--; var minutes = Math.floor(this.countdown / 60); var seconds = this.countdown % 60; this.timerText.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds); if (this.countdown <= 0) { LK.clearInterval(this.countdownInterval); game.removeChild(this.timerText); this.timerText = null; // Reset timerText to null // Spawn 2 coins in front of the tree var coin1 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x - 50, y: this.y - this.height }); var coin2 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x + 50, y: this.y - this.height }); game.addChild(coin1); game.addChild(coin2); // Function to animate the coin drop and bounce var animateCoin = function animateCoin(coin) { var bounceCount = 0; var bounceHeight = 20; var dropSpeed = 5; var bounceSpeed = 2; function drop() { if (coin.y < this.y + 50) { // Adjusted to drop to the bottom of the tree coin.y += dropSpeed; LK.setTimeout(drop.bind(this), 16); } else { bounce(); } } function bounce() { if (bounceCount < 3) { // Bounce 3 times if (coin.y > this.y + 50 - bounceHeight) { // Adjusted to bounce from the bottom of the tree coin.y -= bounceSpeed; } else { bounceCount++; bounceHeight /= 2; } LK.setTimeout(bounce.bind(this), 16); } } drop.call(this); }; animateCoin.call(this, coin1); animateCoin.call(this, coin2); } }.bind(this), 1000); }; }; } else if (i === 1) { var tree2 = LK.getAsset('tree2', { anchorX: 0.5, anchorY: 0.5, x: slot3.x, y: slot3.y }); background3.addChild(tree2); // Add pricetext below tree2 var priceTextTree2 = new Text2('200AD', { size: 70, fill: 0xFFFFFF }); priceTextTree2.anchor.set(0.5, 0); priceTextTree2.x = slot3.x; priceTextTree2.y = slot3.y + slot3.height / 2; background3.addChild(priceTextTree2); tree2.down = function (x, y, obj) { priceTextDisplay.setText('200AD'); // Display price in the new asset var duplicate = LK.getAsset('tree2', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); // Add timer text above the placed tree if (!duplicate.timerText) { duplicate.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); duplicate.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChildAt(duplicate.timerText, game.getChildIndex(background2)); } duplicate.timerText.x = duplicate.x; duplicate.timerText.y = duplicate.y - duplicate.height / 2 - 10; // Position above the tree duplicate.dragging = true; duplicate.data = obj; // Hide background3 and its components background3.visible = false; scrollbar3.visible = false; scrollbutton3.visible = false; background3.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } // Add timer text above the placed tree if (!this.timerText) { this.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); this.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChild(this.timerText); } this.timerText.x = this.x; this.timerText.y = this.y - this.height / 2 - 10; // Position above the tree // Start countdown this.countdown = 30; // 30 seconds if (this.countdownInterval) { LK.clearInterval(this.countdownInterval); } this.countdownInterval = LK.setInterval(function () { this.countdown--; var minutes = Math.floor(this.countdown / 60); var seconds = this.countdown % 60; this.timerText.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds); if (this.countdown <= 0) { LK.clearInterval(this.countdownInterval); game.removeChild(this.timerText); this.timerText = null; // Reset timerText to null // Spawn 2 coins in front of the tree var coin1 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x - 50, y: this.y - this.height }); var coin2 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x + 50, y: this.y - this.height }); game.addChild(coin1); game.addChild(coin2); // Function to animate the coin drop and bounce var animateCoin = function animateCoin(coin) { var bounceCount = 0; var bounceHeight = 20; var dropSpeed = 5; var bounceSpeed = 2; function drop() { if (coin.y < duplicate.y + 50) { // Adjusted to drop to the bottom of the tree coin.y += dropSpeed; LK.setTimeout(drop.bind(this), 16); } else { bounce(); } } function bounce() { if (bounceCount < 3) { // Bounce 3 times if (coin.y > duplicate.y + 50 - bounceHeight) { // Adjusted to bounce from the bottom of the tree coin.y -= bounceSpeed; } else { bounceCount++; bounceHeight /= 2; } LK.setTimeout(bounce.bind(this), 16); } } drop.call(this); }; animateCoin.call(this, coin1); animateCoin.call(this, coin2); } }.bind(this), 1000); }; }; } else if (i === 2) { var tree3 = LK.getAsset('tree3', { anchorX: 0.5, anchorY: 0.5, x: slot3.x, y: slot3.y }); background3.addChild(tree3); // Add pricetext below tree3 var priceTextTree3 = new Text2('200AD', { size: 70, fill: 0xFFFFFF }); priceTextTree3.anchor.set(0.5, 0); priceTextTree3.x = slot3.x; priceTextTree3.y = slot3.y + slot3.height / 2; background3.addChild(priceTextTree3); tree3.down = function (x, y, obj) { priceTextDisplay.setText('200AD'); // Display price in the new asset var duplicate = LK.getAsset('tree3', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); // Add timer text above the placed tree if (!duplicate.timerText) { duplicate.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); duplicate.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChildAt(duplicate.timerText, game.getChildIndex(background2)); } duplicate.timerText.x = duplicate.x; duplicate.timerText.y = duplicate.y - duplicate.height / 2 - 10; // Position above the tree duplicate.dragging = true; duplicate.data = obj; // Hide background3 and its components background3.visible = false; scrollbar3.visible = false; scrollbutton3.visible = false; background3.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } // Add timer text above the placed tree if (!this.timerText) { this.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); this.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChild(this.timerText); } this.timerText.x = this.x; this.timerText.y = this.y - this.height / 2 - 10; // Position above the tree // Start countdown this.countdown = 30; // 30 seconds if (this.countdownInterval) { LK.clearInterval(this.countdownInterval); } this.countdownInterval = LK.setInterval(function () { this.countdown--; var minutes = Math.floor(this.countdown / 60); var seconds = this.countdown % 60; this.timerText.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds); if (this.countdown <= 0) { LK.clearInterval(this.countdownInterval); game.removeChild(this.timerText); this.timerText = null; // Reset timerText to null // Spawn 2 coins in front of the tree var coin1 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x - 50, y: this.y - this.height }); var coin2 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x + 50, y: this.y - this.height }); game.addChild(coin1); game.addChild(coin2); // Function to animate the coin drop and bounce var animateCoin = function animateCoin(coin) { var bounceCount = 0; var bounceHeight = 20; var dropSpeed = 5; var bounceSpeed = 2; function drop() { if (coin.y < this.y + 50) { coin.y += dropSpeed; LK.setTimeout(drop.bind(this), 16); } else { bounce(); } } function bounce() { if (bounceCount < 3) { if (coin.y > this.y + 50 - bounceHeight) { coin.y -= bounceSpeed; } else { bounceCount++; bounceHeight /= 2; } LK.setTimeout(bounce.bind(this), 16); } } drop.call(this); }; animateCoin.call(this, coin1); animateCoin.call(this, coin2); } }.bind(this), 1000); }; }; } else if (i === 3) { var tree4 = LK.getAsset('tree4', { anchorX: 0.5, anchorY: 0.5, x: slot3.x, y: slot3.y }); background3.addChild(tree4); // Add pricetext below tree4 var priceTextTree4 = new Text2('200AD', { size: 70, fill: 0xFFFFFF }); priceTextTree4.anchor.set(0.5, 0); priceTextTree4.x = slot3.x; priceTextTree4.y = slot3.y + slot3.height / 2; background3.addChild(priceTextTree4); tree4.down = function (x, y, obj) { priceTextDisplay.setText('200AD'); // Display price in the new asset var duplicate = LK.getAsset('tree4', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); // Add timer text above the placed tree if (!duplicate.timerText) { duplicate.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); duplicate.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChildAt(duplicate.timerText, game.getChildIndex(background2)); } duplicate.timerText.x = duplicate.x; duplicate.timerText.y = duplicate.y - duplicate.height / 2 - 10; // Position above the tree duplicate.dragging = true; duplicate.data = obj; // Hide background3 and its components background3.visible = false; scrollbar3.visible = false; scrollbutton3.visible = false; background3.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } // Add timer text above the placed tree if (!this.timerText) { this.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); this.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChild(this.timerText); } this.timerText.x = this.x; this.timerText.y = this.y - this.height / 2 - 10; // Position above the tree // Start countdown this.countdown = 30; // 30 seconds if (this.countdownInterval) { LK.clearInterval(this.countdownInterval); } this.countdownInterval = LK.setInterval(function () { this.countdown--; var minutes = Math.floor(this.countdown / 60); var seconds = this.countdown % 60; this.timerText.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds); if (this.countdown <= 0) { LK.clearInterval(this.countdownInterval); game.removeChild(this.timerText); this.timerText = null; // Reset timerText to null // Spawn 2 coins in front of the tree var coin1 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x - 50, y: this.y - this.height }); var coin2 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x + 50, y: this.y - this.height }); game.addChild(coin1); game.addChild(coin2); // Function to animate the coin drop and bounce var animateCoin = function animateCoin(coin) { var bounceCount = 0; var bounceHeight = 20; var dropSpeed = 5; var bounceSpeed = 2; function drop() { if (coin.y < this.y + 50) { coin.y += dropSpeed; LK.setTimeout(drop.bind(this), 16); } else { bounce(); } } function bounce() { if (bounceCount < 3) { if (coin.y > this.y + 50 - bounceHeight) { coin.y -= bounceSpeed; } else { bounceCount++; bounceHeight /= 2; } LK.setTimeout(bounce.bind(this), 16); } } drop.call(this); }; animateCoin.call(this, coin1); animateCoin.call(this, coin2); } }.bind(this), 1000); }; }; } } // Add 4 slots below the first slots that are synced in background3 for (var i = 0; i < 4; i++) { var slot3 = LK.getAsset('Slot', { anchorX: 0.5, anchorY: 0.5, x: i * (slotSpacing3 + 450) + slotSpacing3 + 200, y: 900 // Increase y position to add more space }); background3.addChildAt(slot3, background3.children.length); // Add pricewall below each slot in the second line var pricewall3 = LK.getAsset('pricewall', { anchorX: 0.5, anchorY: 0.0, x: slot3.x, y: slot3.y + slot3.height / 2 + 0 // Position below the slot }); background3.addChild(pricewall3); // Add trees to the slots of background3 if (i === 0) { var tree5 = LK.getAsset('tree5', { anchorX: 0.5, anchorY: 0.5, x: slot3.x, y: slot3.y }); background3.addChild(tree5); // Add pricetext below tree5 var priceTextTree5 = new Text2('300AD', { size: 70, fill: 0xFFFFFF }); priceTextTree5.anchor.set(0.5, 0); priceTextTree5.x = slot3.x; priceTextTree5.y = slot3.y + slot3.height / 2; background3.addChild(priceTextTree5); tree5.down = function (x, y, obj) { var duplicate = LK.getAsset('tree5', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); // Add timer text above the placed tree if (!duplicate.timerText) { duplicate.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); duplicate.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChildAt(duplicate.timerText, game.getChildIndex(background2)); } duplicate.timerText.x = duplicate.x; duplicate.timerText.y = duplicate.y - duplicate.height / 2 - 10; // Position above the tree duplicate.dragging = true; duplicate.data = obj; // Hide background3 and its components background3.visible = false; scrollbar3.visible = false; scrollbutton3.visible = false; background3.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } // Add timer text above the placed tree if (!this.timerText) { this.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); this.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChild(this.timerText); } this.timerText.x = this.x; this.timerText.y = this.y - this.height / 2 - 10; // Position above the tree // Start countdown this.countdown = 30; // 30 seconds if (this.countdownInterval) { LK.clearInterval(this.countdownInterval); } this.countdownInterval = LK.setInterval(function () { this.countdown--; var minutes = Math.floor(this.countdown / 60); var seconds = this.countdown % 60; this.timerText.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds); if (this.countdown <= 0) { LK.clearInterval(this.countdownInterval); game.removeChild(this.timerText); this.timerText = null; // Reset timerText to null // Spawn 2 coins in front of the tree var coin1 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x - 50, y: this.y - this.height }); var coin2 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x + 50, y: this.y - this.height }); game.addChild(coin1); game.addChild(coin2); // Function to animate the coin drop and bounce var animateCoin = function animateCoin(coin) { var bounceCount = 0; var bounceHeight = 20; var dropSpeed = 5; var bounceSpeed = 2; function drop() { if (coin.y < this.y + 50) { coin.y += dropSpeed; LK.setTimeout(drop.bind(this), 16); } else { bounce(); } } function bounce() { if (bounceCount < 2) { if (coin.y > this.y - bounceHeight) { coin.y -= bounceSpeed; } else { bounceCount++; bounceHeight /= 2; } LK.setTimeout(bounce.bind(this), 16); } } drop.call(this); }; animateCoin.call(this, coin1); animateCoin.call(this, coin2); } }.bind(this), 1000); }; }; } else if (i === 1) { var tree6 = LK.getAsset('tree6', { anchorX: 0.5, anchorY: 0.5, x: slot3.x, y: slot3.y }); background3.addChild(tree6); // Add pricetext below tree6 var priceTextTree6 = new Text2('300AD', { size: 70, fill: 0xFFFFFF }); priceTextTree6.anchor.set(0.5, 0); priceTextTree6.x = slot3.x; priceTextTree6.y = slot3.y + slot3.height / 2; background3.addChild(priceTextTree6); tree6.down = function (x, y, obj) { var duplicate = LK.getAsset('tree6', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); // Add timer text above the placed tree if (!duplicate.timerText) { duplicate.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); duplicate.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChildAt(duplicate.timerText, game.getChildIndex(background2)); } duplicate.timerText.x = duplicate.x; duplicate.timerText.y = duplicate.y - duplicate.height / 2 - 10; // Position above the tree duplicate.dragging = true; duplicate.data = obj; // Hide background3 and its components background3.visible = false; scrollbar3.visible = false; scrollbutton3.visible = false; background3.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } // Add timer text above the placed tree if (!this.timerText) { this.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); this.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChild(this.timerText); } this.timerText.x = this.x; this.timerText.y = this.y - this.height / 2 - 10; // Position above the tree // Start countdown this.countdown = 30; // 30 seconds if (this.countdownInterval) { LK.clearInterval(this.countdownInterval); } this.countdownInterval = LK.setInterval(function () { this.countdown--; var minutes = Math.floor(this.countdown / 60); var seconds = this.countdown % 60; this.timerText.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds); if (this.countdown <= 0) { LK.clearInterval(this.countdownInterval); game.removeChild(this.timerText); this.timerText = null; // Reset timerText to null // Spawn 2 coins in front of the tree var coin1 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x - 50, y: this.y - this.height }); var coin2 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x + 50, y: this.y - this.height }); game.addChild(coin1); game.addChild(coin2); // Function to animate the coin drop and bounce var animateCoin = function animateCoin(coin) { var bounceCount = 0; var bounceHeight = 20; var dropSpeed = 5; var bounceSpeed = 2; function drop() { if (coin.y < this.y + 50) { coin.y += dropSpeed; LK.setTimeout(drop.bind(this), 16); } else { bounce(); } } function bounce() { if (bounceCount < 2) { if (coin.y > this.y - bounceHeight) { coin.y -= bounceSpeed; } else { bounceCount++; bounceHeight /= 2; } LK.setTimeout(bounce.bind(this), 16); } } drop.call(this); }; animateCoin.call(this, coin1); animateCoin.call(this, coin2); } }.bind(this), 1000); }; }; } else if (i === 2) { var tree7 = LK.getAsset('tree7', { anchorX: 0.5, anchorY: 0.5, x: slot3.x, y: slot3.y }); background3.addChild(tree7); // Add pricetext below tree7 var priceTextTree7 = new Text2('300AD', { size: 70, fill: 0xFFFFFF }); priceTextTree7.anchor.set(0.5, 0); priceTextTree7.x = slot3.x; priceTextTree7.y = slot3.y + slot3.height / 2; background3.addChild(priceTextTree7); tree7.down = function (x, y, obj) { var duplicate = LK.getAsset('tree7', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); // Add timer text above the placed tree if (!duplicate.timerText) { duplicate.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); duplicate.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChildAt(duplicate.timerText, game.getChildIndex(background2)); } duplicate.timerText.x = duplicate.x; duplicate.timerText.y = duplicate.y - duplicate.height / 2 - 10; // Position above the tree duplicate.dragging = true; duplicate.data = obj; // Hide background3 and its components background3.visible = false; scrollbar3.visible = false; scrollbutton3.visible = false; background3.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } // Add timer text above the placed tree if (!this.timerText) { this.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); this.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChild(this.timerText); } this.timerText.x = this.x; this.timerText.y = this.y - this.height / 2 - 10; // Position above the tree // Start countdown this.countdown = 30; // 30 seconds if (this.countdownInterval) { LK.clearInterval(this.countdownInterval); } this.countdownInterval = LK.setInterval(function () { this.countdown--; var minutes = Math.floor(this.countdown / 60); var seconds = this.countdown % 60; this.timerText.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds); if (this.countdown <= 0) { LK.clearInterval(this.countdownInterval); game.removeChild(this.timerText); this.timerText = null; // Reset timerText to null // Spawn 2 coins in front of the tree var coin1 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x - 50, y: this.y - this.height }); var coin2 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x + 50, y: this.y - this.height }); game.addChild(coin1); game.addChild(coin2); // Function to animate the coin drop and bounce var animateCoin = function animateCoin(coin) { var bounceCount = 0; var bounceHeight = 20; var dropSpeed = 5; var bounceSpeed = 2; function drop() { if (coin.y < this.y + 50) { coin.y += dropSpeed; LK.setTimeout(drop.bind(this), 16); } else { bounce(); } } function bounce() { if (bounceCount < 3) { if (coin.y > this.y + 50 - bounceHeight) { coin.y -= bounceSpeed; } else { bounceCount++; bounceHeight /= 2; } LK.setTimeout(bounce.bind(this), 16); } } drop.call(this); }; animateCoin.call(this, coin1); animateCoin.call(this, coin2); } }.bind(this), 1000); }; }; } else if (i === 3) { var tree8 = LK.getAsset('tree8', { anchorX: 0.5, anchorY: 0.5, x: slot3.x, y: slot3.y }); background3.addChild(tree8); // Add pricetext below tree8 var priceTextTree8 = new Text2('300AD', { size: 70, fill: 0xFFFFFF }); priceTextTree8.anchor.set(0.5, 0); priceTextTree8.x = slot3.x; priceTextTree8.y = slot3.y + slot3.height / 2; background3.addChild(priceTextTree8); tree8.down = function (x, y, obj) { var duplicate = LK.getAsset('tree8', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); // Add timer text above the placed tree if (!duplicate.timerText) { duplicate.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); duplicate.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChildAt(duplicate.timerText, game.getChildIndex(background2)); } duplicate.timerText.x = duplicate.x; duplicate.timerText.y = duplicate.y - duplicate.height / 2 - 10; // Position above the tree duplicate.dragging = true; duplicate.data = obj; // Hide background3 and its components background3.visible = false; scrollbar3.visible = false; scrollbutton3.visible = false; background3.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } // Add timer text above the placed tree if (!this.timerText) { this.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); this.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChild(this.timerText); } this.timerText.x = this.x; this.timerText.y = this.y - this.height / 2 - 10; // Position above the tree // Start countdown this.countdown = 30; // 30 seconds if (this.countdownInterval) { LK.clearInterval(this.countdownInterval); } this.countdownInterval = LK.setInterval(function () { this.countdown--; var minutes = Math.floor(this.countdown / 60); var seconds = this.countdown % 60; this.timerText.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds); if (this.countdown <= 0) { LK.clearInterval(this.countdownInterval); game.removeChild(this.timerText); this.timerText = null; // Reset timerText to null // Spawn 2 coins in front of the tree var coin1 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x - 50, y: this.y - this.height }); var coin2 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x + 50, y: this.y - this.height }); game.addChild(coin1); game.addChild(coin2); // Function to animate the coin drop and bounce var animateCoin = function animateCoin(coin) { var bounceCount = 0; var bounceHeight = 20; var dropSpeed = 5; var bounceSpeed = 2; function drop() { if (coin.y < this.y + 50) { coin.y += dropSpeed; LK.setTimeout(drop.bind(this), 16); } else { bounce(); } } function bounce() { if (bounceCount < 3) { if (coin.y > this.y + 50 - bounceHeight) { coin.y -= bounceSpeed; } else { bounceCount++; bounceHeight /= 2; } LK.setTimeout(bounce.bind(this), 16); } } drop.call(this); }; animateCoin.call(this, coin1); animateCoin.call(this, coin2); } }.bind(this), 1000); }; }; } } // Add another 4 slots below the second 4 slots for (var i = 0; i < 4; i++) { var slot3 = LK.getAsset('Slot', { anchorX: 0.5, anchorY: 0.5, x: i * (slotSpacing3 + 450) + slotSpacing3 + 200, y: 1500 // Increase y position to add more space }); background3.addChildAt(slot3, background3.children.length); // Add pricewall below each slot in the third line var pricewall3 = LK.getAsset('pricewall', { anchorX: 0.5, anchorY: 0.0, x: slot3.x, y: slot3.y + slot3.height / 2 + 0 // Position below the slot }); background3.addChild(pricewall3); // Add trees to the slots of background3 if (i === 0) { var tree9 = LK.getAsset('tree9', { anchorX: 0.5, anchorY: 0.5, x: slot3.x, y: slot3.y }); background3.addChild(tree9); var priceTextTree9 = new Text2('400AD', { size: 70, fill: 0xFFFFFF }); priceTextTree9.anchor.set(0.5, 0); priceTextTree9.x = slot3.x; priceTextTree9.y = slot3.y + slot3.height / 2; background3.addChild(priceTextTree9); tree9.down = function (x, y, obj) { var duplicate = LK.getAsset('tree9', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); // Add timer text above the placed tree if (!duplicate.timerText) { duplicate.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); duplicate.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChildAt(duplicate.timerText, game.getChildIndex(background2)); } duplicate.timerText.x = duplicate.x; duplicate.timerText.y = duplicate.y - duplicate.height / 2 - 10; // Position above the tree duplicate.dragging = true; duplicate.data = obj; // Hide background3 and its components background3.visible = false; scrollbar3.visible = false; scrollbutton3.visible = false; background3.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } // Add timer text above the placed tree if (!this.timerText) { this.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); this.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChild(this.timerText); } this.timerText.x = this.x; this.timerText.y = this.y - this.height / 2 - 10; // Position above the tree // Start countdown this.countdown = 30; // 30 seconds if (this.countdownInterval) { LK.clearInterval(this.countdownInterval); } this.countdownInterval = LK.setInterval(function () { this.countdown--; var minutes = Math.floor(this.countdown / 60); var seconds = this.countdown % 60; this.timerText.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds); if (this.countdown <= 0) { LK.clearInterval(this.countdownInterval); game.removeChild(this.timerText); this.timerText = null; // Reset timerText to null // Spawn 2 coins in front of the tree var coin1 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x - 50, y: this.y - this.height }); var coin2 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x + 50, y: this.y - this.height }); game.addChild(coin1); game.addChild(coin2); // Function to animate the coin drop and bounce var animateCoin = function animateCoin(coin) { var bounceCount = 0; var bounceHeight = 20; var dropSpeed = 5; var bounceSpeed = 2; function drop() { if (coin.y < this.y + 50) { coin.y += dropSpeed; LK.setTimeout(drop.bind(this), 16); } else { bounce(); } } function bounce() { if (bounceCount < 3) { if (coin.y > this.y + 50 - bounceHeight) { coin.y -= bounceSpeed; } else { bounceCount++; bounceHeight /= 2; } LK.setTimeout(bounce.bind(this), 16); } } drop.call(this); }; animateCoin.call(this, coin1); animateCoin.call(this, coin2); } }.bind(this), 1000); }; }; } else if (i === 1) { var tree10 = LK.getAsset('tree10', { anchorX: 0.5, anchorY: 0.5, x: slot3.x, y: slot3.y }); background3.addChild(tree10); var priceTextTree10 = new Text2('400AD', { size: 70, fill: 0xFFFFFF }); priceTextTree10.anchor.set(0.5, 0); priceTextTree10.x = slot3.x; priceTextTree10.y = slot3.y + slot3.height / 2; background3.addChild(priceTextTree10); tree10.down = function (x, y, obj) { var duplicate = LK.getAsset('tree10', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); // Add timer text above the placed tree if (!duplicate.timerText) { duplicate.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); duplicate.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChildAt(duplicate.timerText, game.getChildIndex(background2)); } duplicate.timerText.x = duplicate.x; duplicate.timerText.y = duplicate.y - duplicate.height / 2 - 10; // Position above the tree duplicate.dragging = true; duplicate.data = obj; // Hide background3 and its components background3.visible = false; scrollbar3.visible = false; scrollbutton3.visible = false; background3.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } // Add timer text above the placed tree if (!this.timerText) { this.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); this.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChild(this.timerText); } this.timerText.x = this.x; this.timerText.y = this.y - this.height / 2 - 10; // Position above the tree // Start countdown this.countdown = 30; // 30 seconds if (this.countdownInterval) { LK.clearInterval(this.countdownInterval); } this.countdownInterval = LK.setInterval(function () { this.countdown--; var minutes = Math.floor(this.countdown / 60); var seconds = this.countdown % 60; this.timerText.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds); if (this.countdown <= 0) { LK.clearInterval(this.countdownInterval); game.removeChild(this.timerText); this.timerText = null; // Reset timerText to null // Spawn 2 coins in front of the tree var coin1 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x - 50, y: this.y - this.height }); var coin2 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x + 50, y: this.y - this.height }); game.addChild(coin1); game.addChild(coin2); // Function to animate the coin drop and bounce var animateCoin = function animateCoin(coin) { var bounceCount = 0; var bounceHeight = 20; var dropSpeed = 5; var bounceSpeed = 2; function drop() { if (coin.y < this.y + 50) { coin.y += dropSpeed; LK.setTimeout(drop.bind(this), 16); } else { bounce(); } } function bounce() { if (bounceCount < 3) { if (coin.y > this.y + 50 - bounceHeight) { coin.y -= bounceSpeed; } else { bounceCount++; bounceHeight /= 2; } LK.setTimeout(bounce.bind(this), 16); } } drop.call(this); }; animateCoin.call(this, coin1); animateCoin.call(this, coin2); } }.bind(this), 1000); }; }; } else if (i === 2) { var tree11 = LK.getAsset('tree11', { anchorX: 0.5, anchorY: 0.5, x: slot3.x, y: slot3.y }); background3.addChild(tree11); var priceTextTree11 = new Text2('400AD', { size: 70, fill: 0xFFFFFF }); priceTextTree11.anchor.set(0.5, 0); priceTextTree11.x = slot3.x; priceTextTree11.y = slot3.y + slot3.height / 2; background3.addChild(priceTextTree11); tree11.down = function (x, y, obj) { var duplicate = LK.getAsset('tree11', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); // Add timer text above the placed tree if (!duplicate.timerText) { duplicate.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); duplicate.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChildAt(duplicate.timerText, game.getChildIndex(background2)); } duplicate.timerText.x = duplicate.x; duplicate.timerText.y = duplicate.y - duplicate.height / 2 - 10; // Position above the tree duplicate.dragging = true; duplicate.data = obj; // Hide background3 and its components background3.visible = false; scrollbar3.visible = false; scrollbutton3.visible = false; background3.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } // Add timer text above the placed tree if (!this.timerText) { this.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); this.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChild(this.timerText); } this.timerText.x = this.x; this.timerText.y = this.y - this.height / 2 - 10; // Position above the tree // Start countdown this.countdown = 30; // 30 seconds if (this.countdownInterval) { LK.clearInterval(this.countdownInterval); } this.countdownInterval = LK.setInterval(function () { this.countdown--; var minutes = Math.floor(this.countdown / 60); var seconds = this.countdown % 60; this.timerText.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds); if (this.countdown <= 0) { LK.clearInterval(this.countdownInterval); game.removeChild(this.timerText); this.timerText = null; // Reset timerText to null // Spawn 2 coins in front of the tree var coin1 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x - 50, y: this.y - 100 // Start from the top to the bottom of the tree }); var coin2 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x + 50, y: this.y - 100 // Start from the top to the bottom of the tree }); game.addChild(coin1); game.addChild(coin2); // Function to animate the coin drop and bounce var animateCoin = function animateCoin(coin) { var bounceCount = 0; var bounceHeight = 20; var dropSpeed = 5; var bounceSpeed = 2; function drop() { if (coin.y < this.y + 50) { coin.y += dropSpeed; LK.setTimeout(drop.bind(this), 16); } else { bounce(); } } function bounce() { if (bounceCount < 3) { if (coin.y > this.y + 50 - bounceHeight) { coin.y -= bounceSpeed; } else { bounceCount++; bounceHeight /= 2; } LK.setTimeout(bounce.bind(this), 16); } } drop.call(this); }; animateCoin.call(this, coin1); animateCoin.call(this, coin2); } }.bind(this), 1000); }; }; } else if (i === 3) { var tree12 = LK.getAsset('tree12', { anchorX: 0.5, anchorY: 0.5, x: slot3.x, y: slot3.y }); background3.addChild(tree12); var priceTextTree12 = new Text2('400AD', { size: 70, fill: 0xFFFFFF }); priceTextTree12.anchor.set(0.5, 0); priceTextTree12.x = slot3.x; priceTextTree12.y = slot3.y + slot3.height / 2; background3.addChild(priceTextTree12); tree12.down = function (x, y, obj) { var duplicate = LK.getAsset('tree12', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); // Add timer text above the placed tree if (!duplicate.timerText) { duplicate.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); duplicate.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChildAt(duplicate.timerText, game.getChildIndex(background2)); } duplicate.timerText.x = duplicate.x; duplicate.timerText.y = duplicate.y - duplicate.height / 2 - 10; // Position above the tree duplicate.dragging = true; duplicate.data = obj; // Hide background3 and its components background3.visible = false; scrollbar3.visible = false; scrollbutton3.visible = false; background3.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } // Add timer text above the placed tree // Add timer text above the placed tree if (!this.timerText) { this.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); this.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChild(this.timerText); } this.timerText.x = this.x; this.timerText.y = this.y - this.height / 2 - 10; // Position above the tree // Start countdown this.countdown = 30; // 30 seconds if (this.countdownInterval) { LK.clearInterval(this.countdownInterval); } this.countdownInterval = LK.setInterval(function () { this.countdown--; var minutes = Math.floor(this.countdown / 60); var seconds = this.countdown % 60; this.timerText.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds); if (this.countdown <= 0) { LK.clearInterval(this.countdownInterval); game.removeChild(this.timerText); this.timerText = null; // Reset timerText to null // Spawn 2 coins in front of the tree var coin1 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x - 50, y: this.y - 100 // Start from the top to the bottom of the tree }); var coin2 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x + 50, y: this.y - 100 // Start from the top to the bottom of the tree }); game.addChild(coin1); game.addChild(coin2); // Function to animate the coin drop and bounce var animateCoin = function animateCoin(coin) { var bounceCount = 0; var bounceHeight = 20; var dropSpeed = 5; var bounceSpeed = 2; function drop() { if (coin.y < this.y + 50) { coin.y += dropSpeed; LK.setTimeout(drop.bind(this), 16); } else { bounce(); } } function bounce() { if (bounceCount < 3) { if (coin.y > this.y + 50 - bounceHeight) { coin.y -= bounceSpeed; } else { bounceCount++; bounceHeight /= 2; } LK.setTimeout(bounce.bind(this), 16); } } drop.call(this); }; animateCoin.call(this, coin1); animateCoin.call(this, coin2); } }.bind(this), 1000); }; }; } } // Add another 4 slots below the third 4 slots for (var i = 0; i < 4; i++) { var slot3 = LK.getAsset('Slot', { anchorX: 0.5, anchorY: 0.5, x: i * (slotSpacing3 + 450) + slotSpacing3 + 200, y: 2100 // Increase y position to add more space }); background3.addChildAt(slot3, background3.children.length); // Add pricewall below each slot in the fourth line var pricewall3 = LK.getAsset('pricewall', { anchorX: 0.5, anchorY: 0.0, x: slot3.x, y: slot3.y + slot3.height / 2 + 0 // Position below the slot }); background3.addChild(pricewall3); // Add trees to the slots of background3 if (i === 0) { var tree13 = LK.getAsset('tree13', { anchorX: 0.5, anchorY: 0.5, x: slot3.x, y: slot3.y }); background3.addChild(tree13); // Add pricetext below tree13 var priceTextTree13 = new Text2('500AD', { size: 70, fill: 0xFFFFFF }); priceTextTree13.anchor.set(0.5, 0); priceTextTree13.x = slot3.x; priceTextTree13.y = slot3.y + slot3.height / 2; background3.addChild(priceTextTree13); tree13.down = function (x, y, obj) { var duplicate = LK.getAsset('tree13', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); // Add timer text above the placed tree if (!duplicate.timerText) { duplicate.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); duplicate.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChildAt(duplicate.timerText, game.getChildIndex(background2)); } duplicate.timerText.x = duplicate.x; duplicate.timerText.y = duplicate.y - duplicate.height / 2 - 10; // Position above the tree duplicate.dragging = true; duplicate.data = obj; // Hide background3 and its components background3.visible = false; scrollbar3.visible = false; scrollbutton3.visible = false; background3.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } // Add timer text above the placed tree // Add timer text above the placed tree if (!this.timerText) { this.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); this.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChild(this.timerText); } this.timerText.x = this.x; this.timerText.y = this.y - this.height / 2 - 10; // Position above the tree // Start countdown this.countdown = 30; // 30 seconds if (this.countdownInterval) { LK.clearInterval(this.countdownInterval); } this.countdownInterval = LK.setInterval(function () { this.countdown--; var minutes = Math.floor(this.countdown / 60); var seconds = this.countdown % 60; this.timerText.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds); if (this.countdown <= 0) { LK.clearInterval(this.countdownInterval); game.removeChild(this.timerText); this.timerText = null; // Reset timerText to null // Spawn 2 coins in front of the tree var coin1 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x - 50, y: this.y - 100 // Start from the top to the bottom of the tree }); var coin2 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x + 50, y: this.y - 100 // Start from the top to the bottom of the tree }); game.addChild(coin1); game.addChild(coin2); // Function to animate the coin drop and bounce var animateCoin = function animateCoin(coin) { var bounceCount = 0; var bounceHeight = 20; var dropSpeed = 5; var bounceSpeed = 2; function drop() { if (coin.y < this.y + 50) { coin.y += dropSpeed; LK.setTimeout(drop.bind(this), 16); } else { bounce(); } } function bounce() { if (bounceCount < 3) { if (coin.y > this.y + 50 - bounceHeight) { coin.y -= bounceSpeed; } else { bounceCount++; bounceHeight /= 2; } LK.setTimeout(bounce.bind(this), 16); } } drop.call(this); }; animateCoin.call(this, coin1); animateCoin.call(this, coin2); } }.bind(this), 1000); }; }; } else if (i === 1) { var tree14 = LK.getAsset('tree14', { anchorX: 0.5, anchorY: 0.5, x: slot3.x, y: slot3.y }); background3.addChild(tree14); // Add pricetext below tree14 var priceTextTree14 = new Text2('500AD', { size: 70, fill: 0xFFFFFF }); priceTextTree14.anchor.set(0.5, 0); priceTextTree14.x = slot3.x; priceTextTree14.y = slot3.y + slot3.height / 2; background3.addChild(priceTextTree14); tree14.down = function (x, y, obj) { var duplicate = LK.getAsset('tree14', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); // Add timer text above the placed tree if (!duplicate.timerText) { duplicate.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); duplicate.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChildAt(duplicate.timerText, game.getChildIndex(background2)); } duplicate.timerText.x = duplicate.x; duplicate.timerText.y = duplicate.y - duplicate.height / 2 - 10; // Position above the tree duplicate.dragging = true; duplicate.data = obj; // Hide background3 and its components background3.visible = false; scrollbar3.visible = false; scrollbutton3.visible = false; background3.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } // Add timer text above the placed tree // Add timer text above the placed tree if (!this.timerText) { this.timerText = new Text2('5:00', { size: 50, fill: 0xFFFFFF }); this.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChild(this.timerText); } this.timerText.x = this.x; this.timerText.y = this.y - this.height / 2 - 10; // Position above the tree // Start countdown this.countdown = 30; // 30 seconds if (this.countdownInterval) { LK.clearInterval(this.countdownInterval); } this.countdownInterval = LK.setInterval(function () { this.countdown--; var minutes = Math.floor(this.countdown / 60); var seconds = this.countdown % 60; this.timerText.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds); if (this.countdown <= 0) { LK.clearInterval(this.countdownInterval); game.removeChild(this.timerText); this.timerText = null; // Reset timerText to null // Spawn 2 coins in front of the tree var coin1 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x - 50, y: this.y - 100 // Start from the top to the bottom of the tree }); var coin2 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x + 50, y: this.y - 100 // Start from the top to the bottom of the tree }); game.addChild(coin1); game.addChild(coin2); // Function to animate the coin drop and bounce var animateCoin = function animateCoin(coin) { var bounceCount = 0; var bounceHeight = 20; var dropSpeed = 5; var bounceSpeed = 2; function drop() { if (coin.y < this.y + 50) { coin.y += dropSpeed; LK.setTimeout(drop.bind(this), 16); } else { bounce(); } } function bounce() { if (bounceCount < 3) { if (coin.y > this.y + 50 - bounceHeight) { coin.y -= bounceSpeed; } else { bounceCount++; bounceHeight /= 2; } LK.setTimeout(bounce.bind(this), 16); } } drop.call(this); }; animateCoin.call(this, coin1); animateCoin.call(this, coin2); } }.bind(this), 1000); }; }; } else if (i === 2) { var tree15 = LK.getAsset('tree15', { anchorX: 0.5, anchorY: 0.5, x: slot3.x, y: slot3.y }); background3.addChild(tree15); // Add pricetext below tree15 var priceTextTree15 = new Text2('500AD', { size: 70, fill: 0xFFFFFF }); priceTextTree15.anchor.set(0.5, 0); priceTextTree15.x = slot3.x; priceTextTree15.y = slot3.y + slot3.height / 2; background3.addChild(priceTextTree15); tree15.down = function (x, y, obj) { var duplicate = LK.getAsset('tree15', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); // Add timer text above the placed tree if (!duplicate.timerText) { duplicate.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); duplicate.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChildAt(duplicate.timerText, game.getChildIndex(background2)); } duplicate.timerText.x = duplicate.x; duplicate.timerText.y = duplicate.y - duplicate.height / 2 - 10; // Position above the tree duplicate.dragging = true; duplicate.data = obj; // Hide background3 and its components background3.visible = false; scrollbar3.visible = false; scrollbutton3.visible = false; background3.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } // Add timer text above the placed tree if (!this.timerText) { this.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); this.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChild(this.timerText); } this.timerText.x = this.x; this.timerText.y = this.y - this.height / 2 - 10; // Position above the tree // Start countdown this.countdown = 30; // 30 seconds if (this.countdownInterval) { LK.clearInterval(this.countdownInterval); } this.countdownInterval = LK.setInterval(function () { this.countdown--; var minutes = Math.floor(this.countdown / 60); var seconds = this.countdown % 60; this.timerText.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds); if (this.countdown <= 0) { LK.clearInterval(this.countdownInterval); game.removeChild(this.timerText); this.timerText = null; // Reset timerText to null // Spawn 2 coins in front of the tree var coin1 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x - 50, y: this.y - 100 // Start from the top to the bottom of the tree }); var coin2 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x + 50, y: this.y - 100 // Start from the top to the bottom of the tree }); game.addChild(coin1); game.addChild(coin2); // Function to animate the coin drop and bounce var animateCoin = function animateCoin(coin) { var bounceCount = 0; var bounceHeight = 20; var dropSpeed = 5; var bounceSpeed = 2; function drop() { if (coin.y < this.y + 50) { coin.y += dropSpeed; LK.setTimeout(drop.bind(this), 16); } else { bounce(); } } function bounce() { if (bounceCount < 3) { if (coin.y > this.y + 50 - bounceHeight) { coin.y -= bounceSpeed; } else { bounceCount++; bounceHeight /= 2; } LK.setTimeout(bounce.bind(this), 16); } } drop.call(this); }; animateCoin.call(this, coin1); animateCoin.call(this, coin2); } }.bind(this), 1000); }; }; } else if (i === 3) { var tree16 = LK.getAsset('tree16', { anchorX: 0.5, anchorY: 0.5, x: slot3.x, y: slot3.y }); background3.addChild(tree16); // Add pricetext below tree16 var priceTextTree16 = new Text2('500AD', { size: 70, fill: 0xFFFFFF }); priceTextTree16.anchor.set(0.5, 0); priceTextTree16.x = slot3.x; priceTextTree16.y = slot3.y + slot3.height / 2; background3.addChild(priceTextTree16); tree16.down = function (x, y, obj) { var duplicate = LK.getAsset('tree16', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); // Add timer text above the placed tree if (!duplicate.timerText) { duplicate.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); duplicate.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChildAt(duplicate.timerText, game.getChildIndex(background2)); } duplicate.timerText.x = duplicate.x; duplicate.timerText.y = duplicate.y - duplicate.height / 2 - 10; // Position above the tree duplicate.dragging = true; duplicate.data = obj; // Hide background3 and its components background3.visible = false; scrollbar3.visible = false; scrollbutton3.visible = false; background3.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } // Add timer text above the placed tree if (!this.timerText) { this.timerText = new Text2('0:30', { size: 50, fill: 0xFFFFFF }); this.timerText.anchor.set(0.5, 1); // Anchor to the bottom center game.addChild(this.timerText); } this.timerText.x = this.x; this.timerText.y = this.y - this.height / 2 - 10; // Position above the tree // Start countdown this.countdown = 30; // 30 seconds if (this.countdownInterval) { LK.clearInterval(this.countdownInterval); } this.countdownInterval = LK.setInterval(function () { this.countdown--; var minutes = Math.floor(this.countdown / 60); var seconds = this.countdown % 60; this.timerText.setText(minutes + ':' + (seconds < 10 ? '0' : '') + seconds); if (this.countdown <= 0) { var animateCoin = function animateCoin(coin) { var bounceCount = 0; var bounceHeight = 20; var dropSpeed = 5; var bounceSpeed = 2; function drop() { if (coin.y < this.y) { coin.y += dropSpeed; LK.setTimeout(drop.bind(this), 16); } else { bounce(); } } function bounce() { if (bounceCount < 2) { if (coin.y > this.y - bounceHeight) { coin.y -= bounceSpeed; } else { bounceCount++; bounceHeight /= 2; } LK.setTimeout(bounce.bind(this), 16); } } drop.call(this); }; LK.clearInterval(this.countdownInterval); game.removeChild(this.timerText); this.timerText = null; // Reset timerText to null // Spawn 2 coins in front of the tree var coin1 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x - 50, y: this.y - 100 // Start from the top to the bottom of the tree }); var coin2 = LK.getAsset('Coin', { anchorX: 0.5, anchorY: 0.5, x: this.x + 50, y: this.y - 100 // Start from the top to the bottom of the tree }); game.addChild(coin1); game.addChild(coin2); // Function to animate the coin drop and bounce var animateCoin = function animateCoin(coin) { var bounceCount = 0; var bounceHeight = 20; var dropSpeed = 5; var bounceSpeed = 2; function drop() { if (coin.y < this.y + 50) { coin.y += dropSpeed; LK.setTimeout(drop.bind(this), 16); } else { bounce(); } } function bounce() { if (bounceCount < 3) { if (coin.y > this.y + 50 - bounceHeight) { coin.y -= bounceSpeed; } else { bounceCount++; bounceHeight /= 2; } LK.setTimeout(bounce.bind(this), 16); } } drop.call(this); }; animateCoin.call(this, coin1); animateCoin.call(this, coin2); // Function to animate the coin drop and bounce animateCoin.call(this, coin1); animateCoin.call(this, coin2); } }.bind(this), 1000); }; }; } } scrollbutton3.down = function (x, y, obj) { this.dragging = true; this.data = obj; this.alpha = 0.5; }; scrollbutton3.up = function () { this.alpha = 1; this.dragging = false; this.data = null; }; scrollbutton3.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); // Limit the y position of the scrollbutton to the height of the scrollbar this.y = Math.max(Math.min(newPosition.y, scrollbar3.height - this.height / 2), this.height / 2); // Calculate the ratio of the scrollbutton's position to the scrollbar's height var ratio = (this.y - this.height / 2) / (scrollbar3.height - this.height); // Move the background3 up or down based on the ratio and the speed background3.y = -ratio * (background3.height - game.height); } }; var buildAsset = LK.getAsset('Build', { anchorX: 0.5, // Center the anchor point horizontally anchorY: 0.0, // Anchor point at the top x: 150, // Position on the left side of the screen y: 400 // Position directly below the pause button }); game.addChild(buildAsset); var button1Asset = LK.getAsset('button1', { anchorX: 0.5, anchorY: 0.0, x: 400, y: 0, visible: false // Initially hidden }); game.addChild(button1Asset); var button2Asset = LK.getAsset('button2', { anchorX: 0.5, anchorY: 0.0, x: button1Asset.x + button1Asset.width + 10, y: 0, visible: false // Initially hidden }); game.addChild(button2Asset); // Add text 'House' to button1 var button1Text = new Text2('House', { size: 80, fill: 0xFFFFFF }); button1Text.anchor.set(0.5, 0.5); // Center the text on the button button1Text.x = button1Asset.x; button1Text.y = button1Asset.y + button1Asset.height / 2; button1Text.visible = false; game.addChild(button1Text); // Add text 'Tree' to button2 var button2Text = new Text2('Tree', { size: 80, fill: 0xFFFFFF }); button2Text.anchor.set(0.5, 0.5); // Center the text on the button button2Text.x = button2Asset.x; button2Text.y = button2Asset.y + button2Asset.height / 2; button2Text.visible = false; game.addChild(button2Text); // Add score text to the top right corner var scoreWall = LK.getAsset('scorewall', { anchorX: 1, anchorY: 0, x: 2048, y: 0 }); game.addChild(scoreWall); var coinIcon = LK.getAsset('Coin', { anchorX: 1, anchorY: 0, x: scoreWall.x - scoreWall.width - 10, // Position coin to the left of scoreWall y: scoreWall.y }); game.addChild(coinIcon); var scoreText = new Text2('200', { size: 80, fill: 0xFFFFFF }); LK.setScore(200); scoreText.anchor.set(1.5, 0); // Anchor to the top right corner scoreText.x = 2048; // Right edge of the screen scoreText.y = 0; // Top edge of the screen game.addChild(scoreText); // Function to update score function updateScore() { var score = 0; game.children.forEach(function (child) { if (child.assetId && child.assetId.startsWith('tree')) { score++; } }); scoreText.setText('Score: ' + score); } // Add click event to button2 to toggle visibility of background3, its slots, and scroll components button2Asset.down = function (x, y, obj) { // Toggle visibility of background3 and its components background3.visible = !background3.visible; game.children.forEach(function (child) { if (child.assetId === 'Grid') { child.visible = false; } }); scrollbar3.visible = !scrollbar3.visible; scrollbutton3.visible = !scrollbutton3.visible; background3.children.forEach(function (child) { child.visible = background3.visible; }); // Toggle visibility of background1 based on background2 and background3 visibility background1.visible = !(background2.visible || background3.visible); // Hide all grids when button2 is clicked game.children.forEach(function (child) { if (child.assetId === 'Grid' || child.assetId === 'background1') { child.visible = false; } }); }; // Add click event to button1 to toggle visibility of background2, its slots, and scroll components button1Asset.down = function (x, y, obj) { // Toggle visibility of background2 and its components background2.visible = !background2.visible; game.children.forEach(function (child) { if (child.assetId === 'Grid') { child.visible = false; } }); scrollbar.visible = !scrollbar.visible; scrollbutton.visible = !scrollbutton.visible; background2.children.forEach(function (child) { child.visible = background2.visible; }); // Toggle visibility of background1 based on background2 and background3 visibility background1.visible = !(background2.visible || background3.visible); // Hide all grids when button1 is clicked game.children.forEach(function (child) { if (child.assetId === 'Grid' || child.assetId === 'background1') { child.visible = false; } }); }; // Add click event to build asset to hide background2 and background3 with their components buildAsset.down = function (x, y, obj) { button1Asset.visible = !button1Asset.visible; button1Text.visible = !button1Text.visible; button2Asset.visible = !button2Asset.visible; button2Text.visible = !button2Text.visible; background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background3.visible = false; scrollbar3.visible = false; scrollbutton3.visible = false; }; var slotSpacing = 50; // Define the space between slots for (var i = 0; i < 4; i++) { var slot = LK.getAsset('Slot', { anchorX: 0.5, anchorY: 0.5, x: i * (slotSpacing + 450) + slotSpacing + 200, // Position slots with space between them y: 300 // Arbitrary y position }); background2.addChildAt(slot, background2.children.length); // Add pricewall below each slot var pricewall = LK.getAsset('pricewall', { anchorX: 0.5, anchorY: 0.0, x: slot.x, y: slot.y + slot.height / 2 + 0 // Position below the slot }); background2.addChild(pricewall); // Add house1 to the first slot on the left if (i === 0) { var house1 = LK.getAsset('house1', { anchorX: 0.5, anchorY: 0.5, x: slot.x, y: slot.y }); background2.addChild(house1); // Add pricetext below house1 var priceText1 = new Text2('50AD', { size: 70, fill: 0xFFFFFF }); priceText1.anchor.set(0.5, 0); priceText1.x = pricewall.x; priceText1.y = pricewall.y + pricewall.height / 2 - priceText1.height / 2; background2.addChild(priceText1); house1.down = function (x, y, obj) { priceTextDisplay.setText('50AD'); // Display price in the new asset var duplicate = LK.getAsset('house1', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); duplicate.dragging = true; duplicate.data = obj; // Hide background2 and its components background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background2.children.forEach(function (child) { child.visible = false; }); game.children.forEach(function (child) { if (child.assetId === 'Grid') { child.visible = true; } }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } }; }; } else if (i === 1) { var house2 = LK.getAsset('house2', { anchorX: 0.5, anchorY: 0.5, x: slot.x, y: slot.y }); background2.addChild(house2); // Add pricetext below house2 var priceText2 = new Text2('50AD', { size: 70, fill: 0xFFFFFF }); priceText2.anchor.set(0.5, 0); priceText2.x = pricewall.x; priceText2.y = pricewall.y + pricewall.height / 2 - priceText2.height / 2; background2.addChild(priceText2); house2.down = function (x, y, obj) { priceTextDisplay.setText('50AD'); // Display price in the new asset var duplicate = LK.getAsset('house2', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); duplicate.dragging = true; duplicate.data = obj; // Hide background2 and its components background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background2.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } }; }; } else if (i === 2) { var house3 = LK.getAsset('house3', { anchorX: 0.5, anchorY: 0.5, x: slot.x, y: slot.y }); background2.addChild(house3); // Add pricetext below house3 var priceText3 = new Text2('300AD', { size: 70, fill: 0xFFFFFF }); priceText3.anchor.set(0.5, 0); priceText3.x = pricewall.x; priceText3.y = pricewall.y + pricewall.height / 2 - priceText3.height / 2; background2.addChild(priceText3); house3.down = function (x, y, obj) { priceTextDisplay.setText('300AD'); // Display price in the new asset var duplicate = LK.getAsset('house3', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); duplicate.dragging = true; duplicate.data = obj; // Hide background2 and its components background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background2.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } }; }; } else if (i === 3) { var house4 = LK.getAsset('house4', { anchorX: 0.5, anchorY: 0.5, x: slot.x, y: slot.y }); background2.addChild(house4); // Add pricetext below house4 var priceText4 = new Text2('250AD', { size: 70, fill: 0xFFFFFF }); priceText4.anchor.set(0.5, 0); priceText4.x = pricewall.x; priceText4.y = pricewall.y + pricewall.height / 2 - priceText4.height / 2; background2.addChild(priceText4); house4.down = function (x, y, obj) { priceTextDisplay.setText('250AD'); // Display price in the new asset var duplicate = LK.getAsset('house4', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); duplicate.dragging = true; duplicate.data = obj; // Hide background2 and its components background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background2.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } }; }; } } // Add 4 slots below the first line of slots that are synced in background2 for (var i = 0; i < 4; i++) { var slot = LK.getAsset('Slot', { anchorX: 0.5, anchorY: 0.5, x: i * (slotSpacing + 450) + slotSpacing + 200, y: 900 // Increase y position to add more space }); background2.addChildAt(slot, background2.children.length); // Add pricewall below each slot in the second line var pricewall = LK.getAsset('pricewall', { anchorX: 0.5, anchorY: 0.0, x: slot.x, y: slot.y + slot.height / 2 + 0 // Position below the slot }); background2.addChild(pricewall); // Add house5 to the first slot in the second line if (i === 0) { var house5 = LK.getAsset('house5', { anchorX: 0.5, anchorY: 0.5, x: slot.x, y: slot.y }); background2.addChild(house5); // Add pricetext below house5 var priceText5 = new Text2('150AD', { size: 70, fill: 0xFFFFFF }); priceText5.anchor.set(0.5, 0); priceText5.x = pricewall.x; priceText5.y = pricewall.y + pricewall.height / 2 - priceText5.height / 2; background2.addChild(priceText5); house5.down = function (x, y, obj) { var duplicate = LK.getAsset('house5', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); duplicate.dragging = true; duplicate.data = obj; // Hide background2 and its components background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background2.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } }; }; } else if (i === 1) { var house6 = LK.getAsset('house6', { anchorX: 0.5, anchorY: 0.5, x: slot.x, y: slot.y }); background2.addChild(house6); // Add pricetext below house6 var priceText6 = new Text2('700AD', { size: 70, fill: 0xFFFFFF }); priceText6.anchor.set(0.5, 0); priceText6.x = pricewall.x; priceText6.y = pricewall.y + pricewall.height / 2 - priceText6.height / 2; background2.addChild(priceText6); house6.down = function (x, y, obj) { var duplicate = LK.getAsset('house6', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); duplicate.dragging = true; duplicate.data = obj; // Hide background2 and its components background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background2.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } }; }; } else if (i === 2) { var house7 = LK.getAsset('house7', { anchorX: 0.5, anchorY: 0.5, x: slot.x, y: slot.y }); background2.addChild(house7); // Add pricetext below house7 var priceText7 = new Text2('1500AD', { size: 70, fill: 0xFFFFFF }); priceText7.anchor.set(0.5, 0); priceText7.x = pricewall.x; priceText7.y = pricewall.y + pricewall.height / 2 - priceText7.height / 2; background2.addChild(priceText7); house7.down = function (x, y, obj) { var duplicate = LK.getAsset('house7', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); duplicate.dragging = true; duplicate.data = obj; // Hide background2 and its components background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background2.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } }; }; } else if (i === 3) { var house8 = LK.getAsset('house8', { anchorX: 0.5, anchorY: 0.5, x: slot.x, y: slot.y }); background2.addChild(house8); // Add pricetext below house8 var priceText8 = new Text2('2250AD', { size: 70, fill: 0xFFFFFF }); priceText8.anchor.set(0.5, 0); priceText8.x = pricewall.x; priceText8.y = pricewall.y + pricewall.height / 2 - priceText8.height / 2; background2.addChild(priceText8); house8.down = function (x, y, obj) { var duplicate = LK.getAsset('house8', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); duplicate.dragging = true; duplicate.data = obj; // Hide background2 and its components background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background2.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } }; }; } } // Add 4 slots below the second line of slots that are synced in background2 for (var i = 0; i < 4; i++) { var slot = LK.getAsset('Slot', { anchorX: 0.5, anchorY: 0.5, x: i * (slotSpacing + 450) + slotSpacing + 200, y: 1500 // Increase y position to add more space }); background2.addChildAt(slot, background2.children.length); // Add pricewall below each slot in the third line var pricewall = LK.getAsset('pricewall', { anchorX: 0.5, anchorY: 0.0, x: slot.x, y: slot.y + slot.height / 2 + 0 // Position below the slot }); background2.addChild(pricewall); // Add houses to the third line of slots if (i === 0) { var house9 = LK.getAsset('house9', { anchorX: 0.5, anchorY: 0.5, x: slot.x, y: slot.y }); background2.addChild(house9); // Add pricetext below house9 var priceText9 = new Text2('4540AD', { size: 70, fill: 0xFFFFFF }); priceText9.anchor.set(0.5, 0); priceText9.x = pricewall.x; priceText9.y = pricewall.y + pricewall.height / 2 - priceText9.height / 2; background2.addChild(priceText9); house9.down = function (x, y, obj) { var duplicate = LK.getAsset('house9', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); duplicate.dragging = true; duplicate.data = obj; // Hide background2 and its components background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background2.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } }; }; } else if (i === 1) { var house10 = LK.getAsset('house10', { anchorX: 0.5, anchorY: 0.5, x: slot.x, y: slot.y }); background2.addChild(house10); // Add pricetext below house10 var priceText10 = new Text2('7410AD', { size: 70, fill: 0xFFFFFF }); priceText10.anchor.set(0.5, 0); priceText10.x = pricewall.x; priceText10.y = pricewall.y + pricewall.height / 2 - priceText10.height / 2; background2.addChild(priceText10); house10.down = function (x, y, obj) { var duplicate = LK.getAsset('house10', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); duplicate.dragging = true; duplicate.data = obj; // Hide background2 and its components background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background2.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } }; }; } else if (i === 2) { var house11 = LK.getAsset('house11', { anchorX: 0.5, anchorY: 0.5, x: slot.x, y: slot.y }); background2.addChild(house11); // Add pricetext below house11 var priceText11 = new Text2('8330AD', { size: 70, fill: 0xFFFFFF }); priceText11.anchor.set(0.5, 0); priceText11.x = pricewall.x; priceText11.y = pricewall.y + pricewall.height / 2 - priceText11.height / 2; background2.addChild(priceText11); house11.down = function (x, y, obj) { var duplicate = LK.getAsset('house11', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); duplicate.dragging = true; duplicate.data = obj; // Hide background2 and its components background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background2.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } }; }; } else if (i === 3) { var house12 = LK.getAsset('house12', { anchorX: 0.5, anchorY: 0.5, x: slot.x, y: slot.y }); background2.addChild(house12); // Add pricetext below house12 var priceText12 = new Text2('9210AD', { size: 70, fill: 0xFFFFFF }); priceText12.anchor.set(0.5, 0); priceText12.x = pricewall.x; priceText12.y = pricewall.y + pricewall.height / 2 - priceText12.height / 2; background2.addChild(priceText12); house12.down = function (x, y, obj) { var duplicate = LK.getAsset('house12', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); duplicate.dragging = true; duplicate.data = obj; // Hide background2 and its components background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background2.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } }; }; } } // Add 4 slots below the third line of slots that are synced in background2 for (var i = 0; i < 4; i++) { var slot = LK.getAsset('Slot', { anchorX: 0.5, anchorY: 0.5, x: i * (slotSpacing + 450) + slotSpacing + 200, y: 2100 // Increase y position to add more space }); background2.addChildAt(slot, background2.children.length); // Add pricewall below each slot in the third line var pricewall = LK.getAsset('pricewall', { anchorX: 0.5, anchorY: 0.0, x: slot.x, y: slot.y + slot.height / 2 + 0 // Position below the slot }); background2.addChild(pricewall); // Add houses to the fourth line of slots if (i === 0) { var house13 = LK.getAsset('house13', { anchorX: 0.5, anchorY: 0.5, x: slot.x, y: slot.y }); background2.addChild(house13); // Add pricetext below house13 var priceText13 = new Text2('14500AD', { size: 70, fill: 0xFFFFFF }); priceText13.anchor.set(0.5, 0); priceText13.x = pricewall.x; priceText13.y = pricewall.y + pricewall.height / 2 - priceText13.height / 2; background2.addChild(priceText13); house13.down = function (x, y, obj) { var duplicate = LK.getAsset('house13', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); duplicate.dragging = true; duplicate.data = obj; // Hide background2 and its components background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background2.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } }; }; } else if (i === 1) { var house14 = LK.getAsset('house14', { anchorX: 0.5, anchorY: 0.5, x: slot.x, y: slot.y }); background2.addChild(house14); // Add pricetext below house14 var priceText14 = new Text2('18000AD', { size: 70, fill: 0xFFFFFF }); priceText14.anchor.set(0.5, 0); priceText14.x = pricewall.x; priceText14.y = pricewall.y + pricewall.height / 2 - priceText14.height / 2; background2.addChild(priceText14); house14.down = function (x, y, obj) { var duplicate = LK.getAsset('house14', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); duplicate.dragging = true; duplicate.data = obj; // Hide background2 and its components background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background2.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } }; }; } else if (i === 2) { var house15 = LK.getAsset('house15', { anchorX: 0.5, anchorY: 0.5, x: slot.x, y: slot.y }); background2.addChild(house15); // Add pricetext below house15 var priceText15 = new Text2('25000AD', { size: 70, fill: 0xFFFFFF }); priceText15.anchor.set(0.5, 0); priceText15.x = pricewall.x; priceText15.y = pricewall.y + pricewall.height / 2 - priceText15.height / 2; background2.addChild(priceText15); house15.down = function (x, y, obj) { var duplicate = LK.getAsset('house15', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); duplicate.dragging = true; duplicate.data = obj; // Hide background2 and its components background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background2.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } }; }; } else if (i === 3) { var house16 = LK.getAsset('house16', { anchorX: 0.5, anchorY: 0.5, x: slot.x, y: slot.y }); background2.addChild(house16); // Add pricetext below house16 var priceText16 = new Text2('50000AD', { size: 70, fill: 0xFFFFFF }); priceText16.anchor.set(0.5, 0); priceText16.x = pricewall.x; priceText16.y = pricewall.y + pricewall.height / 2 - priceText16.height / 2; background2.addChild(priceText16); house16.down = function (x, y, obj) { var duplicate = LK.getAsset('house16', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); duplicate.dragging = true; duplicate.data = obj; // Hide background2 and its components background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background2.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } }; }; } } // Add 4 slots below the forth line of slots that are synced in background2 for (var i = 0; i < 4; i++) { var slot = LK.getAsset('Slot', { anchorX: 0.5, anchorY: 0.5, x: i * (slotSpacing + 450) + slotSpacing + 200, y: 2700 // Increase y position to add more space }); background2.addChildAt(slot, background2.children.length); // Add pricewall below each slot in the fourth line var pricewall = LK.getAsset('pricewall', { anchorX: 0.5, anchorY: 0.0, x: slot.x, y: slot.y + slot.height / 2 + 0 // Position below the slot }); background2.addChild(pricewall); // Add house17 to the first slot in the fifth line if (i === 0) { var house17 = LK.getAsset('house17', { anchorX: 0.5, anchorY: 0.5, x: slot.x, y: slot.y }); background2.addChild(house17); var priceText17 = new Text2('60000AD', { size: 70, fill: 0xFFFFFF }); priceText17.anchor.set(0.5, 0); priceText17.x = pricewall.x; priceText17.y = pricewall.y + pricewall.height / 2 - priceText17.height / 2; background2.addChild(priceText17); house17.down = function (x, y, obj) { var duplicate = LK.getAsset('house17', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); duplicate.dragging = true; duplicate.data = obj; // Hide background2 and its components background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background2.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } }; }; } else if (i === 1) { var house18 = LK.getAsset('house18', { anchorX: 0.5, anchorY: 0.5, x: slot.x, y: slot.y }); background2.addChild(house18); var priceText18 = new Text2('75000AD', { size: 70, fill: 0xFFFFFF }); priceText18.anchor.set(0.5, 0); priceText18.x = pricewall.x; priceText18.y = pricewall.y + pricewall.height / 2 - priceText18.height / 2; background2.addChild(priceText18); house18.down = function (x, y, obj) { var duplicate = LK.getAsset('house18', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); duplicate.dragging = true; duplicate.data = obj; background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background2.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } }; }; } else if (i === 2) { var house19 = LK.getAsset('house19', { anchorX: 0.5, anchorY: 0.5, x: slot.x, y: slot.y }); background2.addChild(house19); // Add pricetext below house19 var priceText19 = new Text2('90000AD', { size: 70, fill: 0xFFFFFF }); priceText19.anchor.set(0.5, 0); priceText19.x = pricewall.x; priceText19.y = pricewall.y + pricewall.height / 2 - priceText19.height / 2; background2.addChild(priceText19); house19.down = function (x, y, obj) { var duplicate = LK.getAsset('house19', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); duplicate.dragging = true; duplicate.data = obj; background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background2.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } }; }; } else if (i === 3) { var house20 = LK.getAsset('house20', { anchorX: 0.5, anchorY: 0.5, x: slot.x, y: slot.y }); background2.addChild(house20); // Add pricetext below house20 var priceText20 = new Text2('100000AD', { size: 70, fill: 0xFFFFFF }); priceText20.anchor.set(0.5, 0); priceText20.x = pricewall.x; priceText20.y = pricewall.y + pricewall.height / 2 - priceText20.height / 2; background2.addChild(priceText20); house20.down = function (x, y, obj) { var duplicate = LK.getAsset('house20', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChildAt(duplicate, game.getChildIndex(background2)); duplicate.dragging = true; duplicate.data = obj; background2.visible = false; scrollbar.visible = false; scrollbutton.visible = false; background2.children.forEach(function (child) { child.visible = false; }); duplicate.down = function (x, y, obj) { this.dragging = true; this.data = obj; }; duplicate.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); this.x = newPosition.x; this.y = newPosition.y; } }; duplicate.up = function () { this.dragging = false; this.data = null; // Snap to nearest grid var closestGrid = null; var minDistance = Infinity; game.children.forEach(function (child) { if (child.assetId === 'Grid') { var distance = Math.sqrt(Math.pow(child.x - this.x, 2) + Math.pow(child.y - this.y, 2)); if (distance < minDistance) { minDistance = distance; closestGrid = child; } } }, this); if (closestGrid) { this.x = closestGrid.x; this.y = closestGrid.y; } }; }; } } scrollbutton.down = function (x, y, obj) { this.dragging = true; this.data = obj; this.alpha = 0.5; }; scrollbutton.up = function () { this.alpha = 1; this.dragging = false; this.data = null; }; scrollbutton.move = function (x, y, obj) { if (this.dragging) { var newPosition = this.parent.toLocal(obj.global); // Limit the y position of the scrollbutton to the height of the scrollbar this.y = Math.max(Math.min(newPosition.y, scrollbar.height - this.height / 2), this.height / 2); // Calculate the ratio of the scrollbutton's position to the scrollbar's height var ratio = (this.y - this.height / 2) / (scrollbar.height - this.height); // Move the background2 up or down based on the ratio and the speed background2.y = -ratio * (background2.height - game.height); // Removed synchronization of scrollbar with background2 movement } }; // Removed up functionality from scrollbutton;
===================================================================
--- original.js
+++ change.js
2D wreckage of wood, square, HD colors. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
House from the front facing the screen with big sign above it have description "SHOP", Hd colors
coin, have "AD" not "$", hd colors. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows