User prompt
Change garden cell size to 250x250
User prompt
Adjust garden cell size to 300x300
User prompt
Make the garden 8x8 instead of 9x9
User prompt
Increase bee movement offset by 100%
User prompt
Update using: // Modify the target position to be offset above the touch point game.move = function(x, y, obj) { if (bee.isMoving) { bee.targetX = x; bee.targetY = y - 100; // Offset up by 100 pixels } };
User prompt
Update with this: // Have the bee lead ahead of the touch point game.move = function(x, y, obj) { if (bee.isMoving) { bee.targetX = x; bee.targetY = y + 100; // Offset down by 100 pixels } };
User prompt
Update with this:// Have the bee lead ahead of the touch point game.move = function(x, y, obj) { if (bee.isMoving) { bee.targetX = x; bee.targetY = y + 100; // Offset down by 100 pixels } };
User prompt
Update with this: // Add a trailing distance to the bee's movement self.update = function() { if (self.isMoving) { var dx = self.targetX - self.x; var dy = self.targetY - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 50) { // Keep bee 50 pixels behind touch var angle = Math.atan2(dy, dx); var targetX = self.targetX - Math.cos(angle) * 50; var targetY = self.targetY - Math.sin(angle) * 50; self.x += (targetX - self.x) * self.moveSpeed; self.y += (targetY - self.y) * self.moveSpeed; } self.rotation = Math.atan2(dy, dx) + Math.PI/2; } };
User prompt
Update with this: // In the Bee class, modify the update function self.update = function() { if (self.isMoving) { // Smooth movement towards target self.x += (self.targetX - self.x) * self.moveSpeed; self.y += (self.targetY - self.y) * self.moveSpeed; // Calculate rotation based on movement direction var dx = self.targetX - self.x; var dy = self.targetY - self.y; var angle = Math.atan2(dy, dx); // Add PI/2 to correct the rotation (90 degrees) self.rotation = angle + Math.PI/2; } };
User prompt
Replace touch controls with: // Remove old touch handlers and add new ones for bee movement game.down = function(x, y, obj) { bee.isMoving = true; bee.targetX = x; bee.targetY = y; }; game.move = function(x, y, obj) { if (bee.isMoving) { bee.targetX = x; bee.targetY = y; } }; game.up = function(x, y, obj) { bee.isMoving = false; };
User prompt
Update bee class as necessary with: // In the Bee class, add movement properties var Bee = Container.expand(function() { var self = Container.call(this); var beeSprite = self.attachAsset('Bee', { anchorX: 0.5, anchorY: 0.5 }); // Movement properties self.targetX = self.x; self.targetY = self.y; self.moveSpeed = 0.1; // Adjust this for faster/slower following self.isMoving = false; self.update = function() { if (self.isMoving) { // Smooth movement towards target self.x += (self.targetX - self.x) * self.moveSpeed; self.y += (self.targetY - self.y) * self.moveSpeed; // Calculate rotation based on movement direction var dx = self.targetX - self.x; var dy = self.targetY - self.y; var angle = Math.atan2(dy, dx); self.rotation = angle; } }; return self; });
User prompt
Move hive down 2%
User prompt
Move hive position up 5%
User prompt
Move hive position up 10%
User prompt
Add this code and update any that needs it: var Bee = Container.expand(function() { var self = Container.call(this); // Create bee sprite var beeSprite = self.attachAsset('Bee', { anchorX: 0.5, anchorY: 0.5 }); // Add any bee-specific properties self.isMoving = false; // Basic update function - we'll expand this self.update = function() { // Movement code will go here }; return self; }); var Hive = Container.expand(function() { var self = Container.call(this); // Create hive sprite var hiveSprite = self.attachAsset('Hive', { anchorX: 0.5, anchorY: 0.5 }); return self; }); // Initialize game scene var game = new LK.Game({ backgroundColor: 0x000000 }); // Create and position hive var hive = new Hive(); hive.x = 2048 / 2; // Center horizontally hive.y = 2732 - 200; // Near bottom with some padding // Create bee and position above hive var bee = new Bee(); bee.x = hive.x; // Start above hive bee.y = hive.y - 150; // Add objects to game game.addChild(hive); game.addChild(bee); // Add basic game update loop game.update = function() { // Update all game objects if (bee && bee.update) { bee.update(); } };
User prompt
Shrink the size of the fairy particles.
User prompt
Make updates to code as necessary with: var BasicFlower = Container.expand(function () { var self = Container.call(this); // ... keep existing initialization ... self.usePollen = function () { if (!self.hasActivePollen) { return; } // Get grid position for later use var localPos = { x: self.x - garden.x, y: self.y - garden.y }; var gridX = Math.floor(localPos.x / garden.cellSize); var gridY = Math.floor(localPos.y / garden.cellSize); self.hasActivePollen = false; // Remove fairy particles self.fairyParticles.forEach(function (fairy) { self.removeChild(fairy); }); self.fairyParticles = []; // Start fade out animations tween(self, { tint: 0x808080 }, { duration: 1000, onFinish: function onFinish() { tween(self.scale, { x: 0, y: 0 }, { duration: 1000, easing: tween.easeOut, onFinish: function onFinish() { if (self.parent) { // Clear grid position AFTER animations complete if (gridX >= 0 && gridX < garden.cols && gridY >= 0 && gridY < garden.rows && garden.grid[gridY][gridX] === self) { garden.grid[gridY][gridX] = null; } self.parent.removeChild(self); } } }); tween(self, { alpha: 0 }, { duration: 1000, easing: tween.easeOut }); } }); }; });
User prompt
Make changes as necessary with: var BudSpawner = Container.expand(function () { var self = Container.call(this); self.garden = null; self.gameTime = 0; self.init = function (garden) { self.garden = garden; self.gameTime = 0; }; self.getSpawnRate = function () { return 16; // Spawn every frame for immediate filling }; self.findEmptySpot = function () { var validSpots = []; // Match flower removal coordinate system [gridY][gridX] for (var gridY = 0; gridY < self.garden.rows; gridY++) { for (var gridX = 0; gridX < self.garden.cols; gridX++) { if (!self.garden.grid[gridY][gridX]) { validSpots.push({ x: gridX, y: gridY }); } } } if (validSpots.length > 0) { return validSpots[Math.floor(Math.random() * validSpots.length)]; } return null; }; self.update = function () { self.gameTime = LK.ticks / 60; if (LK.ticks % Math.floor(self.getSpawnRate() / (1000 / 60)) === 0) { var spot = self.findEmptySpot(); if (spot) { var bud = new Bud(); // Match flower removal coordinate system bud.x = spot.x * self.garden.cellSize + self.garden.cellSize / 2; bud.y = spot.y * self.garden.cellSize + self.garden.cellSize / 2; bud.isBud = true; bud.isFlower = false; bud.scale.set(0, 0); tween(bud.scale, { x: 1, y: 1 }, { duration: 1000 }); // Match flower removal coordinate system [gridY][gridX] self.garden.grid[spot.y][spot.x] = bud; self.garden.addChild(bud); } } }; });
User prompt
Replace budspawner update with: garden.budSpawner = new BudSpawner(); garden.budSpawner.init(garden);
User prompt
Please fix the bug: 'ReferenceError: Can't find variable: budSpawner' in or related to this line: 'if (budSpawner) {' Line Number: 662
User prompt
Add this to game but keep var: game.budSpawner = new BudSpawner(); game.budSpawner.init(garden);
User prompt
Please fix the bug: 'ReferenceError: Can't find variable: budSpawner' in or related to this line: 'if (budSpawner) {' Line Number: 662
User prompt
Add this to game: game.budSpawner = new BudSpawner(); game.budSpawner.init(garden);
User prompt
Update as necessary with: var BudSpawner = Container.expand(function () { var self = Container.call(this); self.garden = null; self.gameTime = 0; self.init = function (garden) { self.garden = garden; self.gameTime = 0; }; self.getSpawnRate = function () { // Keep original timing logic return 16; // Spawn every frame for immediate filling }; self.findEmptySpot = function () { var validSpots = []; for (var i = 0; i < self.garden.rows; i++) { for (var j = 0; j < self.garden.cols; j++) { if (!self.garden.grid[i][j]) { validSpots.push({ x: i, y: j }); } } } if (validSpots.length > 0) { return validSpots[Math.floor(Math.random() * validSpots.length)]; } return null; }; self.update = function () { self.gameTime = LK.ticks / 60; if (LK.ticks % Math.floor(self.getSpawnRate() / (1000 / 60)) === 0) { var spot = self.findEmptySpot(); if (spot) { var bud = new Bud(); bud.x = spot.y * self.garden.cellSize + self.garden.cellSize / 2; bud.y = spot.x * self.garden.cellSize + self.garden.cellSize / 2; bud.isBud = true; bud.isFlower = false; bud.scale.set(0, 0); tween(bud.scale, { x: 1, y: 1 }, { duration: 1000 }); self.garden.grid[spot.x][spot.y] = bud; self.garden.addChild(bud); } } }; });
User prompt
Update as necessary using this: var BudSpawner = Container.expand(function () { var self = Container.call(this); self.garden = null; self.gameTime = 0; self.init = function (garden) { self.garden = garden; self.gameTime = 0; }; self.findEmptySpot = function () { var validSpots = []; for (var i = 0; i < self.garden.rows; i++) { for (var j = 0; j < self.garden.cols; j++) { if (!self.garden.grid[i][j]) { validSpots.push({ x: i, y: j }); } } } if (validSpots.length > 0) { return validSpots[Math.floor(Math.random() * validSpots.length)]; } return null; }; self.update = function () { self.gameTime = LK.ticks / 60; var spot = self.findEmptySpot(); if (spot) { var bud = new Bud(); bud.x = spot.y * self.garden.cellSize + self.garden.cellSize / 2; bud.y = spot.x * self.garden.cellSize + self.garden.cellSize / 2; bud.isBud = true; bud.isFlower = false; bud.scale.set(0, 0); tween(bud.scale, { x: 1, y: 1 }, { duration: 1000 }); self.garden.grid[spot.x][spot.y] = bud; self.garden.addChild(bud); } }; });
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var BasicFlower = Container.expand(function () { var self = Container.call(this); var flowerGraphics = self.attachAsset('BasicFlower', { anchorX: 0.5, anchorY: 0.5 }); self.hasActivePollen = false; self.fairyParticles = []; self.FAIRY_COUNT = 3; self.update = function () { var scaleFactor = 1 + Math.sin(LK.ticks * 0.1) * 0.05; flowerGraphics.scale.x = scaleFactor; flowerGraphics.scale.y = scaleFactor; flowerGraphics.rotation = Math.sin(LK.ticks * 0.1) * 0.05; }; self.bloom = function () { // Scale animation self.scale.set(0.3, 0.3); tween(self.scale, { x: 1, y: 1 }, { duration: 1000 }); // Create burst particles self.createPollenBurst(self.x, self.y); // Initialize with active pollen self.hasActivePollen = true; // Create fairy particles for (var i = 0; i < self.FAIRY_COUNT; i++) { var fairy = new PollenParticle().init('fairy'); fairy.scale.set(0.3 + Math.random() * 0.2); // Reduced size for fairy particles fairy.x += (Math.random() - 0.5) * 60; // Further spread out fairy.y += (Math.random() - 0.5) * 60; // Further spread out fairy.rotation = Math.random() * Math.PI * 2; // Add random rotation fairy.rotationSpeed = (Math.random() - 0.5) * 0.2; // Add random rotation speed self.addChild(fairy); self.fairyParticles.push(fairy); } }; self.createPollenBurst = function (x, y) { for (var i = 0; i < 12; i++) { var particle = new PollenParticle().init('burst'); var angle = i / 12 * Math.PI * 2; particle.x = x; particle.y = y; particle.vx = Math.cos(angle) * 3; particle.vy = Math.sin(angle) * 3; if (self.parent) { self.parent.addChild(particle); } } }; self.usePollen = function () { if (!self.hasActivePollen) { return; } // Get grid position for later use var localPos = { x: self.x - garden.x, y: self.y - garden.y }; var gridX = Math.floor(localPos.x / garden.cellSize); var gridY = Math.floor(localPos.y / garden.cellSize); self.hasActivePollen = false; // Remove fairy particles self.fairyParticles.forEach(function (fairy) { self.removeChild(fairy); }); self.fairyParticles = []; // Start fade out animations tween(self, { tint: 0x808080 }, { duration: 1000, onFinish: function onFinish() { tween(self.scale, { x: 0, y: 0 }, { duration: 1000, easing: tween.easeOut, onFinish: function onFinish() { if (self.parent) { // Clear grid position AFTER animations complete if (gridX >= 0 && gridX < garden.cols && gridY >= 0 && gridY < garden.rows && garden.grid[gridY][gridX] === self) { garden.grid[gridY][gridX] = null; } self.parent.removeChild(self); } } }); tween(self, { alpha: 0 }, { duration: 1000, easing: tween.easeOut }); } }); }; }); var Bee = Container.expand(function () { var self = Container.call(this); // Create bee sprite var beeSprite = self.attachAsset('Bee', { anchorX: 0.5, anchorY: 0.5 }); // Movement properties self.targetX = self.x; self.targetY = self.y; self.moveSpeed = 0.1; // Adjust this for faster/slower following self.isMoving = false; self.update = function () { if (self.isMoving) { // Smooth movement towards target self.x += (self.targetX - self.x) * self.moveSpeed; self.y += (self.targetY - self.y) * self.moveSpeed; // Calculate rotation based on movement direction var dx = self.targetX - self.x; var dy = self.targetY - self.y; var angle = Math.atan2(dy, dx); self.rotation = angle; } }; return self; }); // Bud class var Bud = Container.expand(function () { var self = Container.call(this); var budGraphics = self.attachAsset('Bud', { anchorX: 0.5, anchorY: 0.5 }); // Simple periodic animation self.update = function () { self.rotation = Math.sin(LK.ticks * 0.05) * 0.1; }; }); // Add BudSpawner to handle progressive difficulty var BudSpawner = Container.expand(function () { var self = Container.call(this); self.garden = null; self.gameTime = 0; self.init = function (garden) { self.garden = garden; self.gameTime = 0; }; self.findEmptySpot = function () { var validSpots = []; // Match flower removal coordinate system [gridY][gridX] for (var gridY = 0; gridY < self.garden.rows; gridY++) { for (var gridX = 0; gridX < self.garden.cols; gridX++) { if (!self.garden.grid[gridY][gridX]) { validSpots.push({ x: gridX, y: gridY }); } } } if (validSpots.length > 0) { return validSpots[Math.floor(Math.random() * validSpots.length)]; } return null; }; self.getSpawnRate = function () { // Keep original timing logic return 16; // Spawn every frame for immediate filling }; self.update = function () { self.gameTime = LK.ticks / 60; var spot = self.findEmptySpot(); if (spot) { var bud = new Bud(); // Match flower removal coordinate system bud.x = spot.x * self.garden.cellSize + self.garden.cellSize / 2; bud.y = spot.y * self.garden.cellSize + self.garden.cellSize / 2; bud.isBud = true; bud.isFlower = false; bud.scale.set(0, 0); tween(bud.scale, { x: 1, y: 1 }, { duration: 1000 }); // Match flower removal coordinate system [gridY][gridX] self.garden.grid[spot.y][spot.x] = bud; self.garden.addChild(bud); } }; }); // Simplified FlowerManager - mainly for flower conversion and management var FlowerManager = Container.expand(function () { var self = Container.call(this); // Convert a bud to a flower self.convertBudToFlower = function (bud, garden) { var gridPos = { x: Math.floor((bud.y - garden.y) / garden.cellSize), y: Math.floor((bud.x - garden.x) / garden.cellSize) }; var newFlower = new BasicFlower(); newFlower.x = bud.x; newFlower.y = bud.y; newFlower.isFlower = true; garden.removeChild(bud); garden.grid[gridPos.x][gridPos.y] = newFlower; garden.addChild(newFlower); // When a flower blooms: createPollenBurst(newFlower.x, newFlower.y); return newFlower; }; // Empty touch handler as we're using the new trail system self.handleTouch = function () {}; }); //<Assets used in the game will automatically appear here> // Garden class to manage the grid of soil var Garden = Container.expand(function () { var self = Container.call(this); // Add new helper method for safe grid updates self.updateGridPosition = function (row, col, item) { if (row >= 0 && row < self.rows && col >= 0 && col < self.cols) { // First clear any existing item var existingItem = self.grid[row][col]; if (existingItem && existingItem.parent) { existingItem.parent.removeChild(existingItem); } // Then set new item self.grid[row][col] = item; return true; } return false; }; self.grid = []; self.rows = 9; self.cols = 9; self.cellSize = 200; self.init = function () { // Center the grid on screen self.x = (2048 - self.cols * self.cellSize) / 2; self.y = (2732 - self.rows * self.cellSize) / 2 + 2732 * 0.12 - 400; // Initialize grid and fill with buds for (var i = 0; i < self.rows; i++) { self.grid[i] = []; for (var j = 0; j < self.cols; j++) { // Calculate center positions var centerRow = Math.floor(self.rows / 2); var centerCol = Math.floor(self.cols / 2); // If this is the center position, place a flower if (i === centerRow && j === centerCol) { var centerFlower = new BasicFlower(); centerFlower.x = j * self.cellSize + self.cellSize / 2; centerFlower.y = i * self.cellSize + self.cellSize / 2; centerFlower.isFlower = true; centerFlower.hasActivePollen = true; // Create fairy particles for the first flower for (var k = 0; k < centerFlower.FAIRY_COUNT; k++) { var fairy = new PollenParticle().init('fairy'); fairy.scale.set(0.5 + Math.random() * 0.2); fairy.x += (Math.random() - 0.5) * 20; fairy.y += (Math.random() - 0.5) * 20; centerFlower.addChild(fairy); centerFlower.fairyParticles.push(fairy); } self.grid[i][j] = centerFlower; self.addChild(centerFlower); } // Otherwise place a bud else { var bud = new Bud(); bud.x = j * self.cellSize + self.cellSize / 2; bud.y = i * self.cellSize + self.cellSize / 2; bud.isBud = true; bud.isFlower = false; self.grid[i][j] = bud; self.addChild(bud); } } } }; // Helper method to convert grid position to world position self.gridToWorld = function (gridX, gridY) { return { x: self.x + gridX * self.cellSize + self.cellSize / 2, y: self.y + gridY * self.cellSize + self.cellSize / 2 }; }; // Helper method to convert world position to grid position self.worldToGrid = function (worldX, worldY) { var localX = worldX - self.x; var localY = worldY - self.y; return { x: Math.floor(localX / self.cellSize), y: Math.floor(localY / self.cellSize) }; }; }); // GardenBackground class var GardenBackground = Container.expand(function () { var self = Container.call(this); var gardenBackground = LK.getAsset('GardenBackground', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.02, scaleY: 1.02, x: 2048 / 2, y: 2732 / 2 }); self.addChild(gardenBackground); }); var Hive = Container.expand(function () { var self = Container.call(this); // Create hive sprite var hiveSprite = self.attachAsset('Hive', { anchorX: 0.5, anchorY: 0.5 }); return self; }); // PollenParticle class var PollenParticle = Container.expand(function () { var self = Container.call(this); // Particle properties self.velocity = { x: 0, y: 0 }; self.lifespan = 1; // Goes from 1 to 0 self.decayRate = 0.02; // How fast the particle fades self.type = 'trail'; // Can be 'trail' or 'burst' // Create the visual element var pollenGraphics = self.attachAsset('PollenSparkle', { anchorX: 0.5, anchorY: 0.5 }); // Initialize with random properties for more organic feel self.init = function (type) { self.type = type || 'trail'; // Set initial scale based on type if (self.type === 'trail') { self.scale.set(0.7 + Math.random() * 0.3); // Larger for trail self.decayRate = 0.03; // Faster decay for trail // Slight random velocity for trail movement self.velocity = { x: (Math.random() - 0.5) * 2, y: (Math.random() - 0.5) * 2 }; } else if (self.type === 'burst') { self.scale.set(0.5 + Math.random() * 0.3); // Smaller initial size for bursts self.decayRate = 0.01; // Slower decay for longer travel // Radial burst velocity var angle = Math.random() * Math.PI * 2; var speed = 3 + Math.random() * 5; // Increased speed for further travel self.velocity = { x: Math.cos(angle) * speed, y: Math.sin(angle) * speed }; } else if (self.type === 'fairy') { self.lifespan = undefined; // Don't fade out self.startAngle = Math.random() * Math.PI * 2; // Random start position self.orbitRadius = 20 + Math.random() * 40; // Increase orbit radius variation self.orbitSpeed = 0.005 + Math.random() * 0.03; // Increase orbit speed variation self.update = function () { var time = LK.ticks * self.orbitSpeed; // Orbit motion self.x = Math.cos(time + self.startAngle) * self.orbitRadius; self.y = Math.sin(time + self.startAngle) * self.orbitRadius; // Add bobbing self.y += Math.sin(time * 2 + self.startAngle) * 10; }; } // Random rotation speed self.rotationSpeed = (Math.random() - 0.5) * 0.2; // Random starting rotation self.rotation = Math.random() * Math.PI * 2; // Add random rotation speed for dynamic movement self.rotationSpeed = (Math.random() - 0.5) * 0.2; // Full opacity to start self.alpha = 1; return self; }; self.update = function () { // Update position based on velocity self.x += self.velocity.x; self.y += self.velocity.y; // Add rotation self.rotation += self.rotationSpeed; // Slow down velocity over time self.velocity.x *= 0.95; self.velocity.y *= 0.95; // Update lifespan and alpha self.lifespan -= self.decayRate; self.alpha = self.lifespan; // Scale slightly varies with life var scalePulse = 1 + Math.sin(LK.ticks * 0.2) * 0.1; pollenGraphics.scale.set(scalePulse * self.scale.x); // Remove when lifecycle complete if (self.lifespan <= 0) { self.destroy(); } }; }); // First, let's add a PollenTrail class to handle the dragging mechanic var PollenTrail = Container.expand(function () { var self = Container.call(this); self.points = []; self.active = false; self.trailStartTime = 0; // Add this to track when trail started self.startTime = 0; self.TRAIL_DURATION = 2500; // 2.5s as specified self.currentGarden = null; // Store reference to garden self.TRAIL_DURATION = 2500; // 2.5 seconds in milliseconds self.MAX_SPEED = 15; // Adjust this value for proper feel self.startTrail = function (x, y, garden) { self.active = true; self.points = [{ x: x, y: y, time: Date.now() }]; self.startTime = Date.now(); self.trailStartTime = Date.now(); // Record start time self.currentGarden = garden; // Store garden reference self.lastPoint = { x: x, y: y }; }; self.updateTrail = function (x, y) { if (!self.active) { return; } // Enforce maximum speed var dx = x - self.lastPoint.x; var dy = y - self.lastPoint.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > self.MAX_SPEED) { var ratio = self.MAX_SPEED / distance; x = self.lastPoint.x + dx * ratio; y = self.lastPoint.y + dy * ratio; } self.points.push({ x: x, y: y, time: Date.now() }); self.lastPoint = { x: x, y: y }; // Create particle effect along trail var particle = new PollenParticle().init('trail'); particle.x = x; particle.y = y; game.addChild(particle); }; // Add the burst effect function self.createPollenBurst = function (x, y) { for (var i = 0; i < 12; i++) { var particle = new PollenParticle().init('burst'); var angle = i / 12 * Math.PI * 2; var distance = 30; particle.x = x + Math.cos(angle) * distance; particle.y = y + Math.sin(angle) * distance; // Give particles outward velocity particle.vx = Math.cos(angle) * 3; particle.vy = Math.sin(angle) * 3; game.addChild(particle); } }; self.endTrail = function () { if (!self.active) { return; } var affectedBuds = []; var checkedPositions = {}; self.points.forEach(function (point) { var localPos = self.currentGarden.toLocal({ x: point.x, y: point.y }, game); var gridX = Math.floor(localPos.x / self.currentGarden.cellSize); var gridY = Math.floor(localPos.y / self.currentGarden.cellSize); var posKey = gridX + ',' + gridY; if (!checkedPositions[posKey] && gridX >= 0 && gridX < self.currentGarden.cols && gridY >= 0 && gridY < self.currentGarden.rows) { checkedPositions[posKey] = true; var gridItem = self.currentGarden.grid[gridY][gridX]; // Verify it's a valid bud if (gridItem && gridItem.isBud === true && gridItem.isFlower === false) { affectedBuds.push({ bud: gridItem, gridX: gridX, gridY: gridY }); } } }); if (affectedBuds.length >= 2) { affectedBuds.forEach(function (budInfo) { // IMPORTANT: Clear the grid position first self.currentGarden.grid[budInfo.gridY][budInfo.gridX] = null; // Remove the bud from display list self.currentGarden.removeChild(budInfo.bud); // Create new flower var newFlower = new BasicFlower(); newFlower.x = budInfo.bud.x; newFlower.y = budInfo.bud.y; newFlower.isFlower = true; // Update grid position and add to display list self.currentGarden.grid[budInfo.gridY][budInfo.gridX] = newFlower; self.currentGarden.addChild(newFlower); // Start bloom animation newFlower.bloom(); }); } self.active = false; self.points = []; }; self.update = function () { // Add time check to update if (self.active && self.currentGarden) { var currentTime = Date.now(); if (currentTime - self.trailStartTime >= self.TRAIL_DURATION) { // Time's up - end the trail self.endTrail(); } } // Remove points older than TRAIL_DURATION var currentTime = Date.now(); self.points = self.points.filter(function (point) { return currentTime - point.time < self.TRAIL_DURATION; }); // Update all children particles for (var i = self.children.length - 1; i >= 0; i--) { var particle = self.children[i]; if (particle && particle.update) { particle.update(); } } }; }); // Add ScoreManager to handle chain reactions and scoring var ScoreManager = Container.expand(function () { var self = Container.call(this); self.currentScore = 0; self.currentChain = 0; self.chainMultiplier = 1; self.addToChain = function () { self.currentChain++; self.chainMultiplier = Math.min(1 + self.currentChain * 0.5, 5); // Cap at 5x self.addScore(100 * self.chainMultiplier); }; self.resetChain = function () { self.currentChain = 0; self.chainMultiplier = 1; }; self.addScore = function (points) { self.currentScore += Math.floor(points); // Update score display if (game.scoreDisplay) { game.scoreDisplay.text = self.currentScore.toString(); } }; }); // Level display class var LevelDisplay = Text2.expand(function () { var self = Text2.call(this, 'Level 1', { size: 150, fill: 0xFFFFFF }); }); // Score display class var ScoreDisplay = Text2.expand(function () { var self = Text2.call(this, '0', { size: 150, fill: 0xFFFFFF }); }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 //Init game with black background }); /**** * Game Code ****/ // Declare and initialize flowerManager in global scope var flowerManager = new FlowerManager(); var titleScreen = new Container(); var background = LK.getAsset('titlebackground', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 }); titleScreen.addChild(background); var logo = LK.getAsset('logo', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 }); titleScreen.addChild(logo); var playButton = LK.getAsset('playButton', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 + 200 }); titleScreen.addChild(playButton); var tutorialButton = LK.getAsset('tutorialButton', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 + 400 }); titleScreen.addChild(tutorialButton); game.addChild(titleScreen); playButton.down = function (x, y, obj) { game.removeChild(titleScreen); var gardenBackground = new GardenBackground(); game.addChild(gardenBackground); garden = new Garden(); garden.init(); game.addChild(garden); var flowerManager = new FlowerManager(); game.flowerManager = flowerManager; var pollenTrail = new PollenTrail(); game.addChild(pollenTrail); // Ensure pollen particles are rendered on top by adding them last game.setChildIndex(pollenTrail, game.children.length - 1); // Initialize bud spawner garden.budSpawner = new BudSpawner(); garden.budSpawner.init(garden); game.addChild(garden.budSpawner); // Touch handlers game.down = function (x, y, obj) { // Convert global coordinates to garden's local space var localPos = garden.toLocal({ x: x, y: y }, game); // Calculate grid position var gridX = Math.floor(localPos.x / garden.cellSize); var gridY = Math.floor(localPos.y / garden.cellSize); if (gridX >= 0 && gridX < garden.cols && gridY >= 0 && gridY < garden.rows) { var touchedFlower = garden.grid[gridY][gridX]; if (touchedFlower && touchedFlower.isFlower && touchedFlower.hasActivePollen) { pollenTrail.startTrail(x, y, garden); touchedFlower.usePollen(); } } }; game.move = function (x, y, obj) { if (pollenTrail && pollenTrail.active) { pollenTrail.updateTrail(x, y); } }; game.up = function (x, y, obj) { if (pollenTrail && pollenTrail.active) { pollenTrail.endTrail(); } }; // Create and position hive var hive = new Hive(); hive.x = 2048 / 2; // Center horizontally hive.y = 2732 * 0.97 - 200; // Move hive down by 2% of the screen height // Create bee and position above hive var bee = new Bee(); bee.x = hive.x; // Start above hive bee.y = hive.y - 150; // Add objects to game game.addChild(hive); game.addChild(bee); // Initialize score display var scoreDisplay = new ScoreDisplay(); scoreDisplay.anchor.set(0.5, 0); LK.gui.top.addChild(scoreDisplay); game.scoreDisplay = scoreDisplay; // Add the main update loop game.update = function () { // Update spawning system if (game.budSpawner) { game.budSpawner.update(); } // Update trail system if (pollenTrail) { pollenTrail.update(); } // Update garden elements if (garden) { // Update all flowers and buds in the grid for (var i = 0; i < garden.rows; i++) { for (var j = 0; j < garden.cols; j++) { var gridItem = garden.grid[i][j]; if (gridItem && gridItem.update) { gridItem.update(); } } } } // Update all children that have update methods for (var i = 0; i < game.children.length; i++) { var child = game.children[i]; if (child && child.update) { child.update(); } } // Update all particles if (game.particlesToUpdate) { for (var i = game.particlesToUpdate.length - 1; i >= 0; i--) { var particle = game.particlesToUpdate[i]; if (particle && particle.update) { particle.update(); } } } // Update bee if (bee && bee.update) { bee.update(); } }; }; tutorialButton.down = function (x, y, obj) { // Open tutorial }; // Removed duplicate playPollenPatternAnimation method
===================================================================
--- original.js
+++ change.js
@@ -114,13 +114,24 @@
var beeSprite = self.attachAsset('Bee', {
anchorX: 0.5,
anchorY: 0.5
});
- // Add any bee-specific properties
+ // Movement properties
+ self.targetX = self.x;
+ self.targetY = self.y;
+ self.moveSpeed = 0.1; // Adjust this for faster/slower following
self.isMoving = false;
- // Basic update function - we'll expand this
self.update = function () {
- // Movement code will go here
+ if (self.isMoving) {
+ // Smooth movement towards target
+ self.x += (self.targetX - self.x) * self.moveSpeed;
+ self.y += (self.targetY - self.y) * self.moveSpeed;
+ // Calculate rotation based on movement direction
+ var dx = self.targetX - self.x;
+ var dy = self.targetY - self.y;
+ var angle = Math.atan2(dy, dx);
+ self.rotation = angle;
+ }
};
return self;
});
// Bud class
A background image for a puzzle video game depicting the season of summer. Cartoon. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A background image for a puzzle video game depicting the season of fall. Cartoon. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A background image for a puzzle video game depicting the season of winter. Cartoon. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Multiple stylized texts with phrases that include “Hurry!” “Time’s up!” Cartoon style.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Create a SVG text design in bold cartoon style: "SPRING" in chunky rounded letters with floral accents and vines. Use spring pastels.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Create an SVG text design for "SUMMER" in bold cartoon style with chunky rounded letters. Add sun rays and small flower details in warm, vibrant colors.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Create an SVG text design for "FALL" in bold cartoon style with chunky rounded letters. Add small falling leaves and acorn accents in warm autumn colors.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Create an SVG text design for "WINTER" in bold cartoon style with chunky rounded letters. Add small snowflake accents and icy details in cool, frosty blues and white.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Create a SVG text design in bold cartoon style: “Bloom the garden" in chunky rounded letters with floral accents and vines. Use spring pastels.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Create an SVG text design for "Match the blooms" in bold cartoon style with chunky rounded letters. Add sun rays and small flower details in warm, vibrant colors.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Create an SVG text design for "Match to clear leaves" in bold cartoon style with chunky rounded letters. Add small falling leaves and acorn accents in warm autumn colors.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Create an SVG text design for "DANCE TO STAY WARM" in bold cartoon style with chunky rounded letters. Add small snowflake accents and icy details in cool, frosty blues and white.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Create a SVG text design in bold cartoon style: "SEASON COMPLETE!" in chunky rounded letters with stars around it . Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.