Code edit (3 edits merged)
Please save this source code
User prompt
set the displayprice asset position to be added after the sign asset image on the screen.
Code edit (1 edits merged)
Please save this source code
User prompt
reorder it to be added front of sign
User prompt
reorder it to be added before background2
User prompt
prevent it from moving with background1
User prompt
Please fix the bug: 'displayPriceAsset is not defined' in or related to this line: 'var displayPriceAsset = LK.getAsset('Displayprice', {' Line Number: 92
User prompt
Please fix the bug: 'displayPriceAsset is not defined' in or related to this line: 'game.addChild(displayPriceAsset);' Line Number: 92
User prompt
Reorder the displayprice asset to be after sign
User prompt
Add displayprice asset to the sign
User prompt
add new asset above the middle of the sign size 200x100 for the price text when i click a house or tree its price will be appeared in it.
User prompt
show the time & start countdown when the duplicated house is placed.
Code edit (1 edits merged)
Please save this source code
User prompt
show the timertext of the houses after placing it and start decreasing.
User prompt
add timertext to the first 4 houses '0:30' as you did with trees and start decreasing after placing it.
User prompt
let the timer text appear and start after placing the duplicated house not in the slot.
User prompt
add timertext to the first 4 houses '0:30'
User prompt
same with its components
User prompt
Let the sign be before background2
User prompt
Reorder the grids to be added before the sign and its components
User prompt
reorder the sign with grids
Code edit (1 edits merged)
Please save this source code
User prompt
the grids are hiding the sign and its components!
User prompt
Add pricetext to the next 4 trees '500AD'
User prompt
Add pricetext to the next 4 trees '400AD'
/**** * 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 - 50 // Position above the sign }); game.addChild(displayPriceAsset); 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 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