/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Baby = Container.expand(function () { var self = Container.call(this); var babyGraphics = self.attachAsset('baby', { anchorX: 0.5, anchorY: 0.5 }); self.isAwake = false; self.isCrying = false; self.hasPackifier = false; self.happiness = 100; self.wakeUp = function () { if (!self.isAwake) { self.isAwake = true; tween(babyGraphics, { scaleX: 1.1, scaleY: 1.1 }, { duration: 500, easing: tween.easeOut }); } }; self.startCrying = function () { if (!self.isCrying) { self.isCrying = true; self.hasPackifier = false; LK.getSound('cry').play(); babyGraphics.tint = 0xff6b6b; tween(babyGraphics, { rotation: 0.1 }, { duration: 200, easing: tween.easeInOut, onFinish: function onFinish() { tween(babyGraphics, { rotation: -0.1 }, { duration: 200, easing: tween.easeInOut }); } }); } }; self.stopCrying = function () { if (self.isCrying) { self.isCrying = false; self.hasPackifier = true; babyGraphics.tint = 0xfdbcb4; tween.stop(babyGraphics, { rotation: true }); babyGraphics.rotation = 0; LK.getSound('pacifier').play(); } }; self.update = function () { if (self.isCrying && self.happiness > 0) { self.happiness -= 0.5; } else if (!self.isCrying && self.happiness < 100) { self.happiness += 0.2; } }; return self; }); var Mobile = Container.expand(function () { var self = Container.call(this); var mobileGraphics = self.attachAsset('mobile', { anchorX: 0.5, anchorY: 0.5 }); self.isPlaying = false; self.down = function (x, y, obj) { if (!self.isPlaying) { self.playLullaby(); } }; self.playLullaby = function () { self.isPlaying = true; LK.getSound('lullaby').play(); tween(mobileGraphics, { rotation: Math.PI * 2 }, { duration: 3000, easing: tween.linear, onFinish: function onFinish() { self.isPlaying = false; mobileGraphics.rotation = 0; } }); if (baby && baby.isAwake && !baby.isCrying) { LK.setScore(LK.getScore() + 5); updateUI(); } }; return self; }); var Mosquito = Container.expand(function () { var self = Container.call(this); var mosquitoGraphics = self.attachAsset('mosquito', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 2; self.directionX = Math.random() > 0.5 ? 1 : -1; self.directionY = Math.random() > 0.5 ? 1 : -1; self.lifeTime = 0; self.maxLifeTime = 300; // 5 seconds at 60fps self.down = function (x, y, obj) { self.destroy(); for (var i = mosquitoes.length - 1; i >= 0; i--) { if (mosquitoes[i] === self) { mosquitoes.splice(i, 1); break; } } LK.setScore(LK.getScore() + 20); updateUI(); }; self.update = function () { self.x += self.directionX * self.speed; self.y += self.directionY * self.speed; if (self.x <= 50 || self.x >= 1998) { self.directionX *= -1; } if (self.y <= 50 || self.y >= 2682) { self.directionY *= -1; } self.lifeTime++; if (self.lifeTime >= self.maxLifeTime) { if (baby && baby.isAwake) { baby.startCrying(); LK.getSound('mosquito_buzz').play(); } self.destroy(); for (var i = mosquitoes.length - 1; i >= 0; i--) { if (mosquitoes[i] === self) { mosquitoes.splice(i, 1); break; } } } }; return self; }); var Pacifier = Container.expand(function (assetId, color) { var self = Container.call(this); var pacifierGraphics = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5 }); self.color = color; self.down = function (x, y, obj) { if (baby && baby.isAwake && baby.isCrying) { baby.stopCrying(); LK.setScore(LK.getScore() + 10); updateUI(); } }; return self; }); var Torch = Container.expand(function () { var self = Container.call(this); var torchGraphics = self.attachAsset('torch', { anchorX: 0.5, anchorY: 0.5 }); self.isOn = false; self.down = function (x, y, obj) { if (!self.isOn) { self.toggle(); } }; self.toggle = function () { self.isOn = !self.isOn; if (self.isOn) { torchGraphics.tint = 0xffff99; tween(torchGraphics, { scaleX: 1.2, scaleY: 1.2 }, { duration: 300 }); if (lightOverlay) { lightOverlay.alpha = 0.3; tween(lightOverlay, { alpha: 0.6 }, { duration: 500 }); } if (baby) { baby.wakeUp(); } } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a2e }); /**** * Game Code ****/ var baby; var torch; var pacifiers = []; var mobile; var mosquitoes = []; var lightOverlay; var scoreText; var happinessText; var mosquitoSpawnTimer = 0; var gamePhase = 'wake'; // 'wake', 'care', 'play' // Create background var background = game.addChild(LK.getAsset('background', { x: 0, y: 0 })); // Create light overlay (initially invisible) lightOverlay = game.addChild(LK.getAsset('light', { x: 0, y: 0, alpha: 0 })); // Create crib var crib = game.addChild(LK.getAsset('crib', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1500 })); // Create baby baby = game.addChild(new Baby()); baby.x = 1024; baby.y = 1400; // Create torch torch = game.addChild(new Torch()); torch.x = 200; torch.y = 400; // Create pacifiers var pacifier1 = new Pacifier('pacifier1', 0xff69b4); pacifier1.x = 300; pacifier1.y = 2200; pacifiers.push(game.addChild(pacifier1)); var pacifier2 = new Pacifier('pacifier2', 0x87ceeb); pacifier2.x = 500; pacifier2.y = 2200; pacifiers.push(game.addChild(pacifier2)); var pacifier3 = new Pacifier('pacifier3', 0x98fb98); pacifier3.x = 700; pacifier3.y = 2200; pacifiers.push(game.addChild(pacifier3)); // Create mobile mobile = game.addChild(new Mobile()); mobile.x = 1024; mobile.y = 800; // Create UI scoreText = new Text2('Score: 0', { size: 60, fill: 0xFFFFFF }); scoreText.anchor.set(0, 0); LK.gui.top.addChild(scoreText); scoreText.x = 200; scoreText.y = 50; happinessText = new Text2('Happiness: 100', { size: 60, fill: 0xFFFFFF }); happinessText.anchor.set(1, 0); LK.gui.top.addChild(happinessText); happinessText.x = LK.gui.top.width - 50; happinessText.y = 50; function updateUI() { scoreText.setText('Score: ' + LK.getScore()); if (baby) { happinessText.setText('Happiness: ' + Math.floor(baby.happiness)); } } function spawnMosquito() { if (baby && baby.isAwake && mosquitoes.length < 3) { var mosquito = new Mosquito(); mosquito.x = 100 + Math.random() * 1848; mosquito.y = 100 + Math.random() * 1000; mosquitoes.push(game.addChild(mosquito)); } } game.update = function () { // Update baby happiness display updateUI(); // Spawn mosquitoes periodically when baby is awake if (baby && baby.isAwake) { mosquitoSpawnTimer++; if (mosquitoSpawnTimer >= 180) { // Every 3 seconds spawnMosquito(); mosquitoSpawnTimer = 0; } } // Check game over condition if (baby && baby.happiness <= 0) { LK.showGameOver(); } // Check win condition if (LK.getScore() >= 200) { LK.showYouWin(); } }; // Initialize UI updateUI();
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Baby = Container.expand(function () {
var self = Container.call(this);
var babyGraphics = self.attachAsset('baby', {
anchorX: 0.5,
anchorY: 0.5
});
self.isAwake = false;
self.isCrying = false;
self.hasPackifier = false;
self.happiness = 100;
self.wakeUp = function () {
if (!self.isAwake) {
self.isAwake = true;
tween(babyGraphics, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 500,
easing: tween.easeOut
});
}
};
self.startCrying = function () {
if (!self.isCrying) {
self.isCrying = true;
self.hasPackifier = false;
LK.getSound('cry').play();
babyGraphics.tint = 0xff6b6b;
tween(babyGraphics, {
rotation: 0.1
}, {
duration: 200,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(babyGraphics, {
rotation: -0.1
}, {
duration: 200,
easing: tween.easeInOut
});
}
});
}
};
self.stopCrying = function () {
if (self.isCrying) {
self.isCrying = false;
self.hasPackifier = true;
babyGraphics.tint = 0xfdbcb4;
tween.stop(babyGraphics, {
rotation: true
});
babyGraphics.rotation = 0;
LK.getSound('pacifier').play();
}
};
self.update = function () {
if (self.isCrying && self.happiness > 0) {
self.happiness -= 0.5;
} else if (!self.isCrying && self.happiness < 100) {
self.happiness += 0.2;
}
};
return self;
});
var Mobile = Container.expand(function () {
var self = Container.call(this);
var mobileGraphics = self.attachAsset('mobile', {
anchorX: 0.5,
anchorY: 0.5
});
self.isPlaying = false;
self.down = function (x, y, obj) {
if (!self.isPlaying) {
self.playLullaby();
}
};
self.playLullaby = function () {
self.isPlaying = true;
LK.getSound('lullaby').play();
tween(mobileGraphics, {
rotation: Math.PI * 2
}, {
duration: 3000,
easing: tween.linear,
onFinish: function onFinish() {
self.isPlaying = false;
mobileGraphics.rotation = 0;
}
});
if (baby && baby.isAwake && !baby.isCrying) {
LK.setScore(LK.getScore() + 5);
updateUI();
}
};
return self;
});
var Mosquito = Container.expand(function () {
var self = Container.call(this);
var mosquitoGraphics = self.attachAsset('mosquito', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.directionX = Math.random() > 0.5 ? 1 : -1;
self.directionY = Math.random() > 0.5 ? 1 : -1;
self.lifeTime = 0;
self.maxLifeTime = 300; // 5 seconds at 60fps
self.down = function (x, y, obj) {
self.destroy();
for (var i = mosquitoes.length - 1; i >= 0; i--) {
if (mosquitoes[i] === self) {
mosquitoes.splice(i, 1);
break;
}
}
LK.setScore(LK.getScore() + 20);
updateUI();
};
self.update = function () {
self.x += self.directionX * self.speed;
self.y += self.directionY * self.speed;
if (self.x <= 50 || self.x >= 1998) {
self.directionX *= -1;
}
if (self.y <= 50 || self.y >= 2682) {
self.directionY *= -1;
}
self.lifeTime++;
if (self.lifeTime >= self.maxLifeTime) {
if (baby && baby.isAwake) {
baby.startCrying();
LK.getSound('mosquito_buzz').play();
}
self.destroy();
for (var i = mosquitoes.length - 1; i >= 0; i--) {
if (mosquitoes[i] === self) {
mosquitoes.splice(i, 1);
break;
}
}
}
};
return self;
});
var Pacifier = Container.expand(function (assetId, color) {
var self = Container.call(this);
var pacifierGraphics = self.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 0.5
});
self.color = color;
self.down = function (x, y, obj) {
if (baby && baby.isAwake && baby.isCrying) {
baby.stopCrying();
LK.setScore(LK.getScore() + 10);
updateUI();
}
};
return self;
});
var Torch = Container.expand(function () {
var self = Container.call(this);
var torchGraphics = self.attachAsset('torch', {
anchorX: 0.5,
anchorY: 0.5
});
self.isOn = false;
self.down = function (x, y, obj) {
if (!self.isOn) {
self.toggle();
}
};
self.toggle = function () {
self.isOn = !self.isOn;
if (self.isOn) {
torchGraphics.tint = 0xffff99;
tween(torchGraphics, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 300
});
if (lightOverlay) {
lightOverlay.alpha = 0.3;
tween(lightOverlay, {
alpha: 0.6
}, {
duration: 500
});
}
if (baby) {
baby.wakeUp();
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a2e
});
/****
* Game Code
****/
var baby;
var torch;
var pacifiers = [];
var mobile;
var mosquitoes = [];
var lightOverlay;
var scoreText;
var happinessText;
var mosquitoSpawnTimer = 0;
var gamePhase = 'wake'; // 'wake', 'care', 'play'
// Create background
var background = game.addChild(LK.getAsset('background', {
x: 0,
y: 0
}));
// Create light overlay (initially invisible)
lightOverlay = game.addChild(LK.getAsset('light', {
x: 0,
y: 0,
alpha: 0
}));
// Create crib
var crib = game.addChild(LK.getAsset('crib', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1500
}));
// Create baby
baby = game.addChild(new Baby());
baby.x = 1024;
baby.y = 1400;
// Create torch
torch = game.addChild(new Torch());
torch.x = 200;
torch.y = 400;
// Create pacifiers
var pacifier1 = new Pacifier('pacifier1', 0xff69b4);
pacifier1.x = 300;
pacifier1.y = 2200;
pacifiers.push(game.addChild(pacifier1));
var pacifier2 = new Pacifier('pacifier2', 0x87ceeb);
pacifier2.x = 500;
pacifier2.y = 2200;
pacifiers.push(game.addChild(pacifier2));
var pacifier3 = new Pacifier('pacifier3', 0x98fb98);
pacifier3.x = 700;
pacifier3.y = 2200;
pacifiers.push(game.addChild(pacifier3));
// Create mobile
mobile = game.addChild(new Mobile());
mobile.x = 1024;
mobile.y = 800;
// Create UI
scoreText = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(0, 0);
LK.gui.top.addChild(scoreText);
scoreText.x = 200;
scoreText.y = 50;
happinessText = new Text2('Happiness: 100', {
size: 60,
fill: 0xFFFFFF
});
happinessText.anchor.set(1, 0);
LK.gui.top.addChild(happinessText);
happinessText.x = LK.gui.top.width - 50;
happinessText.y = 50;
function updateUI() {
scoreText.setText('Score: ' + LK.getScore());
if (baby) {
happinessText.setText('Happiness: ' + Math.floor(baby.happiness));
}
}
function spawnMosquito() {
if (baby && baby.isAwake && mosquitoes.length < 3) {
var mosquito = new Mosquito();
mosquito.x = 100 + Math.random() * 1848;
mosquito.y = 100 + Math.random() * 1000;
mosquitoes.push(game.addChild(mosquito));
}
}
game.update = function () {
// Update baby happiness display
updateUI();
// Spawn mosquitoes periodically when baby is awake
if (baby && baby.isAwake) {
mosquitoSpawnTimer++;
if (mosquitoSpawnTimer >= 180) {
// Every 3 seconds
spawnMosquito();
mosquitoSpawnTimer = 0;
}
}
// Check game over condition
if (baby && baby.happiness <= 0) {
LK.showGameOver();
}
// Check win condition
if (LK.getScore() >= 200) {
LK.showYouWin();
}
};
// Initialize UI
updateUI();