Code edit (1 edits merged)
Please save this source code
User prompt
My Birthday Party
Initial prompt
Toca birthday party (2011). Type your first name here, tap on number 1 or number 7 that shows how old you are, tap on any balloon from 4 balloons to choose, tap on any cake from 4 cakes to choose, tap on any colored icing to ice your cake, tap on the doorbell to see what it is, tap o choose a bubble wand, and then wave it across the screen to make bubbles, tap on 1 or 7 candles to blow out.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var AgeSelector = Container.expand(function () { var self = Container.call(this); self.selectedAge = 1; var age1Button = new Text2('1', { size: 120, fill: 0xFF6B6B }); age1Button.anchor.set(0.5, 0.5); age1Button.x = -100; self.addChild(age1Button); var age7Button = new Text2('7', { size: 120, fill: 0x4ECDC4 }); age7Button.anchor.set(0.5, 0.5); age7Button.x = 100; self.addChild(age7Button); self.down = function (x, y, obj) { if (x < 0) { self.selectedAge = 1; age1Button.fill = "#ff0000"; age7Button.fill = "#4ecdc4"; } else { self.selectedAge = 7; age7Button.fill = "#00ff00"; age1Button.fill = "#ff6b6b"; } }; return self; }); var BalloonSelector = Container.expand(function () { var self = Container.call(this); self.selectedBalloon = 'balloons1'; self.balloonOptions = []; for (var i = 0; i < 4; i++) { var balloon = self.attachAsset('balloons' + (i + 1), { anchorX: 0.5, anchorY: 0.5, scaleX: 0.3, scaleY: 0.3, x: (i - 1.5) * 200 }); self.balloonOptions.push(balloon); } self.down = function (x, y, obj) { var index = Math.floor((x + 300) / 200); if (index >= 0 && index < 4) { self.selectedBalloon = 'balloons' + (index + 1); // Visual feedback for (var i = 0; i < self.balloonOptions.length; i++) { self.balloonOptions[i].alpha = i === index ? 1.0 : 0.5; } } }; return self; }); var BubbleWand = Container.expand(function () { var self = Container.call(this); var wandGraphic = self.attachAsset('wand', { anchorX: 0.5, anchorY: 1.0 }); self.bubbles = []; self.isWaving = false; self.down = function (x, y, obj) { self.isWaving = true; }; self.up = function (x, y, obj) { self.isWaving = false; }; self.move = function (x, y, obj) { if (self.isWaving) { self.x = x; self.y = y; // Create bubble if (Math.random() < 0.3) { self.createBubble(x, y); } } }; self.createBubble = function (x, y) { var bubble = LK.getAsset('bubble', { anchorX: 0.5, anchorY: 0.5, x: x, y: y, alpha: 0.7 }); game.addChild(bubble); self.bubbles.push(bubble); // Animate bubble tween(bubble, { y: y - 300, alpha: 0 }, { duration: 2000, onFinish: function onFinish() { bubble.destroy(); var index = self.bubbles.indexOf(bubble); if (index > -1) { self.bubbles.splice(index, 1); } } }); LK.getSound('pop').play(); }; return self; }); var CakeSelector = Container.expand(function () { var self = Container.call(this); self.selectedCake = 'cake1'; self.cakeOptions = []; for (var i = 0; i < 4; i++) { var cake = self.attachAsset('cake' + (i + 1), { anchorX: 0.5, anchorY: 0.5, scaleX: 0.4, scaleY: 0.4, x: (i - 1.5) * 250 }); self.cakeOptions.push(cake); } self.down = function (x, y, obj) { var index = Math.floor((x + 375) / 250); if (index >= 0 && index < 4) { self.selectedCake = 'cake' + (index + 1); // Visual feedback for (var i = 0; i < self.cakeOptions.length; i++) { self.cakeOptions[i].alpha = i === index ? 1.0 : 0.5; } } }; return self; }); var CandleCeremony = Container.expand(function () { var self = Container.call(this); self.cake = null; self.candles = []; self.candleCount = 1; self.candlesPlaced = false; self.setupCake = function (cakeType, icingColor, age) { self.cake = self.attachAsset(cakeType, { anchorX: 0.5, anchorY: 0.5 }); // Add icing decoration var icingAsset = 'icing_' + icingColor; for (var i = 0; i < 5; i++) { var icing = LK.getAsset(icingAsset, { anchorX: 0.5, anchorY: 0.5, x: (i - 2) * 60, y: -120 }); self.addChild(icing); } self.candleCount = age; }; self.down = function (x, y, obj) { if (!self.candlesPlaced) { self.placeCandles(); } else { self.blowOutCandles(); } }; self.placeCandles = function () { for (var i = 0; i < self.candleCount; i++) { var candle = LK.getAsset('candle', { anchorX: 0.5, anchorY: 1.0, x: (i - (self.candleCount - 1) / 2) * 50, y: -100 }); self.addChild(candle); var flame = LK.getAsset('flame', { anchorX: 0.5, anchorY: 1.0, x: (i - (self.candleCount - 1) / 2) * 50, y: -180 }); self.addChild(flame); self.candles.push({ candle: candle, flame: flame, lit: true }); } self.candlesPlaced = true; }; self.blowOutCandles = function () { for (var i = 0; i < self.candles.length; i++) { if (self.candles[i].lit) { self.candles[i].flame.alpha = 0; self.candles[i].lit = false; } } LK.getSound('blow_candles').play(); // Show wish message var wishText = new Text2('Make a wish! 🌟', { size: 80, fill: 0xFF6B6B }); wishText.anchor.set(0.5, 0.5); wishText.y = 200; self.addChild(wishText); tween(wishText, { alpha: 0 }, { duration: 3000 }); }; return self; }); var Doorbell = Container.expand(function () { var self = Container.call(this); var doorbellGraphic = self.attachAsset('doorbell', { anchorX: 0.5, anchorY: 0.5 }); self.surpriseText = new Text2('', { size: 60, fill: 0xFF6B6B }); self.surpriseText.anchor.set(0.5, 0.5); self.surpriseText.y = 150; self.addChild(self.surpriseText); self.down = function (x, y, obj) { var surprises = ['🎉 Party guests arrived!', '🎁 Gift delivered!', '🎵 Music started!', '🍰 More cake!']; var randomSurprise = surprises[Math.floor(Math.random() * surprises.length)]; self.surpriseText.setText(randomSurprise); LK.getSound('doorbell_ring').play(); tween(doorbellGraphic, { scaleX: 1.2, scaleY: 1.2 }, { duration: 100 }); tween(doorbellGraphic, { scaleX: 1.0, scaleY: 1.0 }, { duration: 100 }); }; return self; }); var IcingSelector = Container.expand(function () { var self = Container.call(this); self.selectedIcing = 'red'; var icingColors = ['red', 'blue', 'green', 'yellow']; self.icingOptions = []; for (var i = 0; i < 4; i++) { var icing = self.attachAsset('icing_' + icingColors[i], { anchorX: 0.5, anchorY: 0.5, scaleX: 2, scaleY: 2, x: (i - 1.5) * 150 }); self.icingOptions.push(icing); } self.down = function (x, y, obj) { var index = Math.floor((x + 225) / 150); if (index >= 0 && index < 4) { self.selectedIcing = icingColors[index]; // Visual feedback for (var i = 0; i < self.icingOptions.length; i++) { self.icingOptions[i].alpha = i === index ? 1.0 : 0.5; } } }; return self; }); var NameInput = Container.expand(function () { var self = Container.call(this); self.inputText = new Text2('Enter your name...', { size: 80, fill: 0x333333 }); self.inputText.anchor.set(0.5, 0.5); self.addChild(self.inputText); self.playerName = ''; self.down = function (x, y, obj) { // Simple name input simulation - cycle through common names var names = ['Alex', 'Sam', 'Jordan', 'Casey', 'Taylor']; var currentIndex = names.indexOf(self.playerName); var nextIndex = (currentIndex + 1) % names.length; self.playerName = names[nextIndex]; self.inputText.setText(self.playerName); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xfff5f5 }); /**** * Game Code ****/ // Party elements var gameState = 'nameEntry'; var playerName = ''; var playerAge = 1; var selectedBalloon = 'balloons1'; var selectedCake = 'cake1'; var selectedIcing = 'red'; // UI Elements var titleText = new Text2('My Birthday Party! 🎉', { size: 100, fill: 0xFF6B6B }); titleText.anchor.set(0.5, 0); LK.gui.top.addChild(titleText); var instructionText = new Text2('Tap to enter your name', { size: 60, fill: 0x333333 }); instructionText.anchor.set(0.5, 0.5); instructionText.x = 1024; instructionText.y = 400; game.addChild(instructionText); // Game elements var nameInput = null; var ageSelector = null; var balloonSelector = null; var cakeSelector = null; var icingSelector = null; var doorbell = null; var bubbleWand = null; var candleCeremony = null; function initializeNameEntry() { nameInput = new NameInput(); nameInput.x = 1024; nameInput.y = 600; game.addChild(nameInput); } function initializeAgeSelection() { if (nameInput) { playerName = nameInput.playerName; nameInput.destroy(); nameInput = null; } instructionText.setText('Choose your age: 1 or 7'); ageSelector = new AgeSelector(); ageSelector.x = 1024; ageSelector.y = 800; game.addChild(ageSelector); } function initializeBalloonSelection() { if (ageSelector) { playerAge = ageSelector.selectedAge; ageSelector.destroy(); ageSelector = null; } instructionText.setText('Pick your favorite balloons!'); balloonSelector = new BalloonSelector(); balloonSelector.x = 1024; balloonSelector.y = 800; game.addChild(balloonSelector); } function initializeCakeSelection() { if (balloonSelector) { selectedBalloon = balloonSelector.selectedBalloon; balloonSelector.destroy(); balloonSelector = null; } instructionText.setText('Choose your birthday cake!'); cakeSelector = new CakeSelector(); cakeSelector.x = 1024; cakeSelector.y = 1000; game.addChild(cakeSelector); } function initializeIcingSelection() { if (cakeSelector) { selectedCake = cakeSelector.selectedCake; cakeSelector.destroy(); cakeSelector = null; } instructionText.setText('Pick icing color for decoration!'); icingSelector = new IcingSelector(); icingSelector.x = 1024; icingSelector.y = 1200; game.addChild(icingSelector); } function initializePartyTime() { if (icingSelector) { selectedIcing = icingSelector.selectedIcing; icingSelector.destroy(); icingSelector = null; } instructionText.setText('Ring the doorbell for surprises!'); // Add chosen balloons as decoration var balloonDecor = LK.getAsset(selectedBalloon, { anchorX: 0.5, anchorY: 0.5, x: 300, y: 400, scaleX: 0.6, scaleY: 0.6 }); game.addChild(balloonDecor); var balloonDecor2 = LK.getAsset(selectedBalloon, { anchorX: 0.5, anchorY: 0.5, x: 1700, y: 400, scaleX: 0.6, scaleY: 0.6 }); game.addChild(balloonDecor2); doorbell = new Doorbell(); doorbell.x = 1024; doorbell.y = 600; game.addChild(doorbell); } function initializeBubbleTime() { instructionText.setText('Wave the magic wand to make bubbles!'); if (doorbell) { doorbell.destroy(); doorbell = null; } bubbleWand = new BubbleWand(); bubbleWand.x = 1024; bubbleWand.y = 1000; game.addChild(bubbleWand); } function initializeCandleTime() { instructionText.setText('Place candles and blow them out!'); if (bubbleWand) { bubbleWand.destroy(); bubbleWand = null; } candleCeremony = new CandleCeremony(); candleCeremony.x = 1024; candleCeremony.y = 1400; candleCeremony.setupCake(selectedCake, selectedIcing, playerAge); game.addChild(candleCeremony); } function initializeComplete() { instructionText.setText('Happy Birthday ' + playerName + '! 🎂🎉'); // Show final celebration var celebrationText = new Text2('🎊 Party Complete! 🎊', { size: 80, fill: 0xFF6B6B }); celebrationText.anchor.set(0.5, 0.5); celebrationText.x = 1024; celebrationText.y = 2200; game.addChild(celebrationText); } // Initialize first state initializeNameEntry(); var stateTimer = 0; game.down = function (x, y, obj) { stateTimer = 0; // Reset timer on interaction }; game.update = function () { stateTimer++; // Auto-advance states for demo purposes (can be removed for manual progression) if (stateTimer > 300) { // 5 seconds at 60fps stateTimer = 0; switch (gameState) { case 'nameEntry': gameState = 'ageSelection'; initializeAgeSelection(); break; case 'ageSelection': gameState = 'balloonSelection'; initializeBalloonSelection(); break; case 'balloonSelection': gameState = 'cakeSelection'; initializeCakeSelection(); break; case 'cakeSelection': gameState = 'icingSelection'; initializeIcingSelection(); break; case 'icingSelection': gameState = 'partyTime'; initializePartyTime(); break; case 'partyTime': gameState = 'bubbleTime'; initializeBubbleTime(); break; case 'bubbleTime': gameState = 'candleTime'; initializeCandleTime(); break; case 'candleTime': gameState = 'complete'; initializeComplete(); break; } } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var AgeSelector = Container.expand(function () {
var self = Container.call(this);
self.selectedAge = 1;
var age1Button = new Text2('1', {
size: 120,
fill: 0xFF6B6B
});
age1Button.anchor.set(0.5, 0.5);
age1Button.x = -100;
self.addChild(age1Button);
var age7Button = new Text2('7', {
size: 120,
fill: 0x4ECDC4
});
age7Button.anchor.set(0.5, 0.5);
age7Button.x = 100;
self.addChild(age7Button);
self.down = function (x, y, obj) {
if (x < 0) {
self.selectedAge = 1;
age1Button.fill = "#ff0000";
age7Button.fill = "#4ecdc4";
} else {
self.selectedAge = 7;
age7Button.fill = "#00ff00";
age1Button.fill = "#ff6b6b";
}
};
return self;
});
var BalloonSelector = Container.expand(function () {
var self = Container.call(this);
self.selectedBalloon = 'balloons1';
self.balloonOptions = [];
for (var i = 0; i < 4; i++) {
var balloon = self.attachAsset('balloons' + (i + 1), {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.3,
scaleY: 0.3,
x: (i - 1.5) * 200
});
self.balloonOptions.push(balloon);
}
self.down = function (x, y, obj) {
var index = Math.floor((x + 300) / 200);
if (index >= 0 && index < 4) {
self.selectedBalloon = 'balloons' + (index + 1);
// Visual feedback
for (var i = 0; i < self.balloonOptions.length; i++) {
self.balloonOptions[i].alpha = i === index ? 1.0 : 0.5;
}
}
};
return self;
});
var BubbleWand = Container.expand(function () {
var self = Container.call(this);
var wandGraphic = self.attachAsset('wand', {
anchorX: 0.5,
anchorY: 1.0
});
self.bubbles = [];
self.isWaving = false;
self.down = function (x, y, obj) {
self.isWaving = true;
};
self.up = function (x, y, obj) {
self.isWaving = false;
};
self.move = function (x, y, obj) {
if (self.isWaving) {
self.x = x;
self.y = y;
// Create bubble
if (Math.random() < 0.3) {
self.createBubble(x, y);
}
}
};
self.createBubble = function (x, y) {
var bubble = LK.getAsset('bubble', {
anchorX: 0.5,
anchorY: 0.5,
x: x,
y: y,
alpha: 0.7
});
game.addChild(bubble);
self.bubbles.push(bubble);
// Animate bubble
tween(bubble, {
y: y - 300,
alpha: 0
}, {
duration: 2000,
onFinish: function onFinish() {
bubble.destroy();
var index = self.bubbles.indexOf(bubble);
if (index > -1) {
self.bubbles.splice(index, 1);
}
}
});
LK.getSound('pop').play();
};
return self;
});
var CakeSelector = Container.expand(function () {
var self = Container.call(this);
self.selectedCake = 'cake1';
self.cakeOptions = [];
for (var i = 0; i < 4; i++) {
var cake = self.attachAsset('cake' + (i + 1), {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.4,
scaleY: 0.4,
x: (i - 1.5) * 250
});
self.cakeOptions.push(cake);
}
self.down = function (x, y, obj) {
var index = Math.floor((x + 375) / 250);
if (index >= 0 && index < 4) {
self.selectedCake = 'cake' + (index + 1);
// Visual feedback
for (var i = 0; i < self.cakeOptions.length; i++) {
self.cakeOptions[i].alpha = i === index ? 1.0 : 0.5;
}
}
};
return self;
});
var CandleCeremony = Container.expand(function () {
var self = Container.call(this);
self.cake = null;
self.candles = [];
self.candleCount = 1;
self.candlesPlaced = false;
self.setupCake = function (cakeType, icingColor, age) {
self.cake = self.attachAsset(cakeType, {
anchorX: 0.5,
anchorY: 0.5
});
// Add icing decoration
var icingAsset = 'icing_' + icingColor;
for (var i = 0; i < 5; i++) {
var icing = LK.getAsset(icingAsset, {
anchorX: 0.5,
anchorY: 0.5,
x: (i - 2) * 60,
y: -120
});
self.addChild(icing);
}
self.candleCount = age;
};
self.down = function (x, y, obj) {
if (!self.candlesPlaced) {
self.placeCandles();
} else {
self.blowOutCandles();
}
};
self.placeCandles = function () {
for (var i = 0; i < self.candleCount; i++) {
var candle = LK.getAsset('candle', {
anchorX: 0.5,
anchorY: 1.0,
x: (i - (self.candleCount - 1) / 2) * 50,
y: -100
});
self.addChild(candle);
var flame = LK.getAsset('flame', {
anchorX: 0.5,
anchorY: 1.0,
x: (i - (self.candleCount - 1) / 2) * 50,
y: -180
});
self.addChild(flame);
self.candles.push({
candle: candle,
flame: flame,
lit: true
});
}
self.candlesPlaced = true;
};
self.blowOutCandles = function () {
for (var i = 0; i < self.candles.length; i++) {
if (self.candles[i].lit) {
self.candles[i].flame.alpha = 0;
self.candles[i].lit = false;
}
}
LK.getSound('blow_candles').play();
// Show wish message
var wishText = new Text2('Make a wish! 🌟', {
size: 80,
fill: 0xFF6B6B
});
wishText.anchor.set(0.5, 0.5);
wishText.y = 200;
self.addChild(wishText);
tween(wishText, {
alpha: 0
}, {
duration: 3000
});
};
return self;
});
var Doorbell = Container.expand(function () {
var self = Container.call(this);
var doorbellGraphic = self.attachAsset('doorbell', {
anchorX: 0.5,
anchorY: 0.5
});
self.surpriseText = new Text2('', {
size: 60,
fill: 0xFF6B6B
});
self.surpriseText.anchor.set(0.5, 0.5);
self.surpriseText.y = 150;
self.addChild(self.surpriseText);
self.down = function (x, y, obj) {
var surprises = ['🎉 Party guests arrived!', '🎁 Gift delivered!', '🎵 Music started!', '🍰 More cake!'];
var randomSurprise = surprises[Math.floor(Math.random() * surprises.length)];
self.surpriseText.setText(randomSurprise);
LK.getSound('doorbell_ring').play();
tween(doorbellGraphic, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 100
});
tween(doorbellGraphic, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100
});
};
return self;
});
var IcingSelector = Container.expand(function () {
var self = Container.call(this);
self.selectedIcing = 'red';
var icingColors = ['red', 'blue', 'green', 'yellow'];
self.icingOptions = [];
for (var i = 0; i < 4; i++) {
var icing = self.attachAsset('icing_' + icingColors[i], {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 2,
x: (i - 1.5) * 150
});
self.icingOptions.push(icing);
}
self.down = function (x, y, obj) {
var index = Math.floor((x + 225) / 150);
if (index >= 0 && index < 4) {
self.selectedIcing = icingColors[index];
// Visual feedback
for (var i = 0; i < self.icingOptions.length; i++) {
self.icingOptions[i].alpha = i === index ? 1.0 : 0.5;
}
}
};
return self;
});
var NameInput = Container.expand(function () {
var self = Container.call(this);
self.inputText = new Text2('Enter your name...', {
size: 80,
fill: 0x333333
});
self.inputText.anchor.set(0.5, 0.5);
self.addChild(self.inputText);
self.playerName = '';
self.down = function (x, y, obj) {
// Simple name input simulation - cycle through common names
var names = ['Alex', 'Sam', 'Jordan', 'Casey', 'Taylor'];
var currentIndex = names.indexOf(self.playerName);
var nextIndex = (currentIndex + 1) % names.length;
self.playerName = names[nextIndex];
self.inputText.setText(self.playerName);
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xfff5f5
});
/****
* Game Code
****/
// Party elements
var gameState = 'nameEntry';
var playerName = '';
var playerAge = 1;
var selectedBalloon = 'balloons1';
var selectedCake = 'cake1';
var selectedIcing = 'red';
// UI Elements
var titleText = new Text2('My Birthday Party! 🎉', {
size: 100,
fill: 0xFF6B6B
});
titleText.anchor.set(0.5, 0);
LK.gui.top.addChild(titleText);
var instructionText = new Text2('Tap to enter your name', {
size: 60,
fill: 0x333333
});
instructionText.anchor.set(0.5, 0.5);
instructionText.x = 1024;
instructionText.y = 400;
game.addChild(instructionText);
// Game elements
var nameInput = null;
var ageSelector = null;
var balloonSelector = null;
var cakeSelector = null;
var icingSelector = null;
var doorbell = null;
var bubbleWand = null;
var candleCeremony = null;
function initializeNameEntry() {
nameInput = new NameInput();
nameInput.x = 1024;
nameInput.y = 600;
game.addChild(nameInput);
}
function initializeAgeSelection() {
if (nameInput) {
playerName = nameInput.playerName;
nameInput.destroy();
nameInput = null;
}
instructionText.setText('Choose your age: 1 or 7');
ageSelector = new AgeSelector();
ageSelector.x = 1024;
ageSelector.y = 800;
game.addChild(ageSelector);
}
function initializeBalloonSelection() {
if (ageSelector) {
playerAge = ageSelector.selectedAge;
ageSelector.destroy();
ageSelector = null;
}
instructionText.setText('Pick your favorite balloons!');
balloonSelector = new BalloonSelector();
balloonSelector.x = 1024;
balloonSelector.y = 800;
game.addChild(balloonSelector);
}
function initializeCakeSelection() {
if (balloonSelector) {
selectedBalloon = balloonSelector.selectedBalloon;
balloonSelector.destroy();
balloonSelector = null;
}
instructionText.setText('Choose your birthday cake!');
cakeSelector = new CakeSelector();
cakeSelector.x = 1024;
cakeSelector.y = 1000;
game.addChild(cakeSelector);
}
function initializeIcingSelection() {
if (cakeSelector) {
selectedCake = cakeSelector.selectedCake;
cakeSelector.destroy();
cakeSelector = null;
}
instructionText.setText('Pick icing color for decoration!');
icingSelector = new IcingSelector();
icingSelector.x = 1024;
icingSelector.y = 1200;
game.addChild(icingSelector);
}
function initializePartyTime() {
if (icingSelector) {
selectedIcing = icingSelector.selectedIcing;
icingSelector.destroy();
icingSelector = null;
}
instructionText.setText('Ring the doorbell for surprises!');
// Add chosen balloons as decoration
var balloonDecor = LK.getAsset(selectedBalloon, {
anchorX: 0.5,
anchorY: 0.5,
x: 300,
y: 400,
scaleX: 0.6,
scaleY: 0.6
});
game.addChild(balloonDecor);
var balloonDecor2 = LK.getAsset(selectedBalloon, {
anchorX: 0.5,
anchorY: 0.5,
x: 1700,
y: 400,
scaleX: 0.6,
scaleY: 0.6
});
game.addChild(balloonDecor2);
doorbell = new Doorbell();
doorbell.x = 1024;
doorbell.y = 600;
game.addChild(doorbell);
}
function initializeBubbleTime() {
instructionText.setText('Wave the magic wand to make bubbles!');
if (doorbell) {
doorbell.destroy();
doorbell = null;
}
bubbleWand = new BubbleWand();
bubbleWand.x = 1024;
bubbleWand.y = 1000;
game.addChild(bubbleWand);
}
function initializeCandleTime() {
instructionText.setText('Place candles and blow them out!');
if (bubbleWand) {
bubbleWand.destroy();
bubbleWand = null;
}
candleCeremony = new CandleCeremony();
candleCeremony.x = 1024;
candleCeremony.y = 1400;
candleCeremony.setupCake(selectedCake, selectedIcing, playerAge);
game.addChild(candleCeremony);
}
function initializeComplete() {
instructionText.setText('Happy Birthday ' + playerName + '! 🎂🎉');
// Show final celebration
var celebrationText = new Text2('🎊 Party Complete! 🎊', {
size: 80,
fill: 0xFF6B6B
});
celebrationText.anchor.set(0.5, 0.5);
celebrationText.x = 1024;
celebrationText.y = 2200;
game.addChild(celebrationText);
}
// Initialize first state
initializeNameEntry();
var stateTimer = 0;
game.down = function (x, y, obj) {
stateTimer = 0; // Reset timer on interaction
};
game.update = function () {
stateTimer++;
// Auto-advance states for demo purposes (can be removed for manual progression)
if (stateTimer > 300) {
// 5 seconds at 60fps
stateTimer = 0;
switch (gameState) {
case 'nameEntry':
gameState = 'ageSelection';
initializeAgeSelection();
break;
case 'ageSelection':
gameState = 'balloonSelection';
initializeBalloonSelection();
break;
case 'balloonSelection':
gameState = 'cakeSelection';
initializeCakeSelection();
break;
case 'cakeSelection':
gameState = 'icingSelection';
initializeIcingSelection();
break;
case 'icingSelection':
gameState = 'partyTime';
initializePartyTime();
break;
case 'partyTime':
gameState = 'bubbleTime';
initializeBubbleTime();
break;
case 'bubbleTime':
gameState = 'candleTime';
initializeCandleTime();
break;
case 'candleTime':
gameState = 'complete';
initializeComplete();
break;
}
}
};