/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Drum = Container.expand(function () {
var self = Container.call(this);
var drum = self.attachAsset('drum', {
anchorX: 0.5,
anchorY: 0.5
});
var stick1 = self.attachAsset('drumstick', {
anchorX: 0.5,
anchorY: 0.5,
x: -60,
y: -80,
rotation: -Math.PI / 4
});
var stick2 = self.attachAsset('drumstick', {
anchorX: 0.5,
anchorY: 0.5,
x: 60,
y: -80,
rotation: Math.PI / 4
});
self.down = function (x, y, obj) {
LK.getSound('drumBeat').play();
tween(drum, {
scaleY: 0.9
}, {
duration: 100
});
tween(stick1, {
y: -60
}, {
duration: 100
});
tween(stick2, {
y: -60
}, {
duration: 100
});
LK.setTimeout(function () {
tween(drum, {
scaleY: 1
}, {
duration: 100
});
tween(stick1, {
y: -80
}, {
duration: 100
});
tween(stick2, {
y: -80
}, {
duration: 100
});
}, 100);
};
return self;
});
var GiftBox = Container.expand(function () {
var self = Container.call(this);
self.isOpened = false;
self.toyType = '';
self.isShaking = false;
var box = self.attachAsset('giftBox', {
anchorX: 0.5,
anchorY: 0.5
});
var ribbonH = self.attachAsset('giftRibbon', {
anchorX: 0.5,
anchorY: 0.5
});
var ribbonV = self.attachAsset('giftRibbon', {
anchorX: 0.5,
anchorY: 0.5,
rotation: Math.PI / 2
});
var bow = self.attachAsset('giftBow', {
anchorX: 0.5,
anchorY: 0.5,
y: -120
});
self.setToyType = function (type) {
self.toyType = type;
};
self.shake = function () {
if (self.isOpened || self.isShaking) return;
self.isShaking = true;
LK.getSound('giftShake').play();
tween(self, {
rotation: -0.1
}, {
duration: 100
});
LK.setTimeout(function () {
tween(self, {
rotation: 0.1
}, {
duration: 100
});
}, 100);
LK.setTimeout(function () {
tween(self, {
rotation: 0
}, {
duration: 100,
onFinish: function onFinish() {
self.isShaking = false;
}
});
}, 200);
};
self.unwrap = function () {
if (self.isOpened) return;
self.isOpened = true;
LK.getSound('unwrap').play();
tween(box, {
alpha: 0
}, {
duration: 500
});
tween(ribbonH, {
alpha: 0
}, {
duration: 500
});
tween(ribbonV, {
alpha: 0
}, {
duration: 500
});
tween(bow, {
alpha: 0
}, {
duration: 500,
onFinish: function onFinish() {
self.createToy();
}
});
};
self.createToy = function () {
var toy = null;
if (self.toyType === 'kazoo') {
toy = self.addChild(new Kazoo());
} else if (self.toyType === 'partyBlower') {
toy = self.addChild(new PartyBlower());
} else if (self.toyType === 'drum') {
toy = self.addChild(new Drum());
} else if (self.toyType === 'xylophone') {
toy = self.addChild(new Xylophone());
} else if (self.toyType === 'toyFrog') {
toy = self.addChild(new ToyFrog());
}
};
self.down = function (x, y, obj) {
if (!self.isOpened) {
self.shake();
LK.setTimeout(function () {
self.unwrap();
}, 600);
}
};
return self;
});
var Kazoo = Container.expand(function () {
var self = Container.call(this);
var kazoo = self.attachAsset('kazoo', {
anchorX: 0.5,
anchorY: 0.5,
rotation: Math.PI / 4
});
self.down = function (x, y, obj) {
LK.getSound('kazooSound').play();
tween(kazoo, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200
});
LK.setTimeout(function () {
tween(kazoo, {
scaleX: 1,
scaleY: 1
}, {
duration: 200
});
}, 200);
};
return self;
});
var PartyBlower = Container.expand(function () {
var self = Container.call(this);
var blower = self.attachAsset('partyBlower', {
anchorX: 0.5,
anchorY: 0.5
});
var extension = self.attachAsset('blowerExtension', {
anchorX: 0,
anchorY: 0.5,
x: 30,
scaleX: 0
});
self.isExtended = false;
self.down = function (x, y, obj) {
LK.getSound('blowerSound').play();
if (!self.isExtended) {
tween(extension, {
scaleX: 1
}, {
duration: 300
});
self.isExtended = true;
} else {
tween(extension, {
scaleX: 0
}, {
duration: 300
});
self.isExtended = false;
}
};
return self;
});
var ToyFrog = Container.expand(function () {
var self = Container.call(this);
var frog = self.attachAsset('toyFrog', {
anchorX: 0.5,
anchorY: 0.5
});
var eye1 = self.attachAsset('frogEye', {
anchorX: 0.5,
anchorY: 0.5,
x: -30,
y: -20
});
var eye2 = self.attachAsset('frogEye', {
anchorX: 0.5,
anchorY: 0.5,
x: 30,
y: -20
});
self.isHopping = false;
self.hop = function () {
if (self.isHopping) return;
self.isHopping = true;
LK.getSound('frogHop').play();
tween(self, {
y: self.y - 50
}, {
duration: 200,
easing: tween.easeOut
});
LK.setTimeout(function () {
tween(self, {
y: self.y + 50
}, {
duration: 200,
easing: tween.easeIn,
onFinish: function onFinish() {
self.isHopping = false;
}
});
}, 200);
};
self.down = function (x, y, obj) {
self.hop();
};
return self;
});
var Xylophone = Container.expand(function () {
var self = Container.call(this);
var base = self.attachAsset('xylophone', {
anchorX: 0.5,
anchorY: 0.5
});
self.keys = [];
var colors = [0xff0000, 0xff8800, 0xffff00, 0x00ff00, 0x0088ff, 0x8800ff];
for (var i = 0; i < 6; i++) {
var key = self.attachAsset('xyloKey', {
anchorX: 0.5,
anchorY: 0.5,
x: -125 + i * 50,
tint: colors[i]
});
key.keyIndex = i;
self.keys.push(key);
}
self.playKey = function (keyIndex) {
LK.getSound('xyloNote').play();
var key = self.keys[keyIndex];
tween(key, {
y: 20
}, {
duration: 100
});
LK.setTimeout(function () {
tween(key, {
y: 0
}, {
duration: 100
});
}, 100);
};
self.down = function (x, y, obj) {
for (var i = 0; i < self.keys.length; i++) {
var key = self.keys[i];
var keyPos = self.toLocal(key.parent.toGlobal(key.position));
if (Math.abs(x - keyPos.x) < 25 && Math.abs(y - keyPos.y) < 50) {
self.playKey(i);
break;
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xffeecc
});
/****
* Game Code
****/
var giftBoxes = [];
var toyTypes = ['kazoo', 'partyBlower', 'drum', 'xylophone', 'toyFrog', 'kazoo'];
var titleText = new Text2('Party Gift Surprise!', {
size: 120,
fill: 0xFF4444
});
titleText.anchor.set(0.5, 0);
LK.gui.top.addChild(titleText);
titleText.y = 50;
var instructionText = new Text2('Tap gifts to shake and unwrap them!', {
size: 80,
fill: 0x444444
});
instructionText.anchor.set(0.5, 0);
LK.gui.top.addChild(instructionText);
instructionText.y = 200;
for (var i = 0; i < 6; i++) {
var gift = new GiftBox();
gift.setToyType(toyTypes[i]);
var row = Math.floor(i / 3);
var col = i % 3;
gift.x = 350 + col * 450;
gift.y = 800 + row * 450;
giftBoxes.push(gift);
game.addChild(gift);
}
game.update = function () {
// Game logic updates here if needed
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Drum = Container.expand(function () {
var self = Container.call(this);
var drum = self.attachAsset('drum', {
anchorX: 0.5,
anchorY: 0.5
});
var stick1 = self.attachAsset('drumstick', {
anchorX: 0.5,
anchorY: 0.5,
x: -60,
y: -80,
rotation: -Math.PI / 4
});
var stick2 = self.attachAsset('drumstick', {
anchorX: 0.5,
anchorY: 0.5,
x: 60,
y: -80,
rotation: Math.PI / 4
});
self.down = function (x, y, obj) {
LK.getSound('drumBeat').play();
tween(drum, {
scaleY: 0.9
}, {
duration: 100
});
tween(stick1, {
y: -60
}, {
duration: 100
});
tween(stick2, {
y: -60
}, {
duration: 100
});
LK.setTimeout(function () {
tween(drum, {
scaleY: 1
}, {
duration: 100
});
tween(stick1, {
y: -80
}, {
duration: 100
});
tween(stick2, {
y: -80
}, {
duration: 100
});
}, 100);
};
return self;
});
var GiftBox = Container.expand(function () {
var self = Container.call(this);
self.isOpened = false;
self.toyType = '';
self.isShaking = false;
var box = self.attachAsset('giftBox', {
anchorX: 0.5,
anchorY: 0.5
});
var ribbonH = self.attachAsset('giftRibbon', {
anchorX: 0.5,
anchorY: 0.5
});
var ribbonV = self.attachAsset('giftRibbon', {
anchorX: 0.5,
anchorY: 0.5,
rotation: Math.PI / 2
});
var bow = self.attachAsset('giftBow', {
anchorX: 0.5,
anchorY: 0.5,
y: -120
});
self.setToyType = function (type) {
self.toyType = type;
};
self.shake = function () {
if (self.isOpened || self.isShaking) return;
self.isShaking = true;
LK.getSound('giftShake').play();
tween(self, {
rotation: -0.1
}, {
duration: 100
});
LK.setTimeout(function () {
tween(self, {
rotation: 0.1
}, {
duration: 100
});
}, 100);
LK.setTimeout(function () {
tween(self, {
rotation: 0
}, {
duration: 100,
onFinish: function onFinish() {
self.isShaking = false;
}
});
}, 200);
};
self.unwrap = function () {
if (self.isOpened) return;
self.isOpened = true;
LK.getSound('unwrap').play();
tween(box, {
alpha: 0
}, {
duration: 500
});
tween(ribbonH, {
alpha: 0
}, {
duration: 500
});
tween(ribbonV, {
alpha: 0
}, {
duration: 500
});
tween(bow, {
alpha: 0
}, {
duration: 500,
onFinish: function onFinish() {
self.createToy();
}
});
};
self.createToy = function () {
var toy = null;
if (self.toyType === 'kazoo') {
toy = self.addChild(new Kazoo());
} else if (self.toyType === 'partyBlower') {
toy = self.addChild(new PartyBlower());
} else if (self.toyType === 'drum') {
toy = self.addChild(new Drum());
} else if (self.toyType === 'xylophone') {
toy = self.addChild(new Xylophone());
} else if (self.toyType === 'toyFrog') {
toy = self.addChild(new ToyFrog());
}
};
self.down = function (x, y, obj) {
if (!self.isOpened) {
self.shake();
LK.setTimeout(function () {
self.unwrap();
}, 600);
}
};
return self;
});
var Kazoo = Container.expand(function () {
var self = Container.call(this);
var kazoo = self.attachAsset('kazoo', {
anchorX: 0.5,
anchorY: 0.5,
rotation: Math.PI / 4
});
self.down = function (x, y, obj) {
LK.getSound('kazooSound').play();
tween(kazoo, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200
});
LK.setTimeout(function () {
tween(kazoo, {
scaleX: 1,
scaleY: 1
}, {
duration: 200
});
}, 200);
};
return self;
});
var PartyBlower = Container.expand(function () {
var self = Container.call(this);
var blower = self.attachAsset('partyBlower', {
anchorX: 0.5,
anchorY: 0.5
});
var extension = self.attachAsset('blowerExtension', {
anchorX: 0,
anchorY: 0.5,
x: 30,
scaleX: 0
});
self.isExtended = false;
self.down = function (x, y, obj) {
LK.getSound('blowerSound').play();
if (!self.isExtended) {
tween(extension, {
scaleX: 1
}, {
duration: 300
});
self.isExtended = true;
} else {
tween(extension, {
scaleX: 0
}, {
duration: 300
});
self.isExtended = false;
}
};
return self;
});
var ToyFrog = Container.expand(function () {
var self = Container.call(this);
var frog = self.attachAsset('toyFrog', {
anchorX: 0.5,
anchorY: 0.5
});
var eye1 = self.attachAsset('frogEye', {
anchorX: 0.5,
anchorY: 0.5,
x: -30,
y: -20
});
var eye2 = self.attachAsset('frogEye', {
anchorX: 0.5,
anchorY: 0.5,
x: 30,
y: -20
});
self.isHopping = false;
self.hop = function () {
if (self.isHopping) return;
self.isHopping = true;
LK.getSound('frogHop').play();
tween(self, {
y: self.y - 50
}, {
duration: 200,
easing: tween.easeOut
});
LK.setTimeout(function () {
tween(self, {
y: self.y + 50
}, {
duration: 200,
easing: tween.easeIn,
onFinish: function onFinish() {
self.isHopping = false;
}
});
}, 200);
};
self.down = function (x, y, obj) {
self.hop();
};
return self;
});
var Xylophone = Container.expand(function () {
var self = Container.call(this);
var base = self.attachAsset('xylophone', {
anchorX: 0.5,
anchorY: 0.5
});
self.keys = [];
var colors = [0xff0000, 0xff8800, 0xffff00, 0x00ff00, 0x0088ff, 0x8800ff];
for (var i = 0; i < 6; i++) {
var key = self.attachAsset('xyloKey', {
anchorX: 0.5,
anchorY: 0.5,
x: -125 + i * 50,
tint: colors[i]
});
key.keyIndex = i;
self.keys.push(key);
}
self.playKey = function (keyIndex) {
LK.getSound('xyloNote').play();
var key = self.keys[keyIndex];
tween(key, {
y: 20
}, {
duration: 100
});
LK.setTimeout(function () {
tween(key, {
y: 0
}, {
duration: 100
});
}, 100);
};
self.down = function (x, y, obj) {
for (var i = 0; i < self.keys.length; i++) {
var key = self.keys[i];
var keyPos = self.toLocal(key.parent.toGlobal(key.position));
if (Math.abs(x - keyPos.x) < 25 && Math.abs(y - keyPos.y) < 50) {
self.playKey(i);
break;
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xffeecc
});
/****
* Game Code
****/
var giftBoxes = [];
var toyTypes = ['kazoo', 'partyBlower', 'drum', 'xylophone', 'toyFrog', 'kazoo'];
var titleText = new Text2('Party Gift Surprise!', {
size: 120,
fill: 0xFF4444
});
titleText.anchor.set(0.5, 0);
LK.gui.top.addChild(titleText);
titleText.y = 50;
var instructionText = new Text2('Tap gifts to shake and unwrap them!', {
size: 80,
fill: 0x444444
});
instructionText.anchor.set(0.5, 0);
LK.gui.top.addChild(instructionText);
instructionText.y = 200;
for (var i = 0; i < 6; i++) {
var gift = new GiftBox();
gift.setToyType(toyTypes[i]);
var row = Math.floor(i / 3);
var col = i % 3;
gift.x = 350 + col * 450;
gift.y = 800 + row * 450;
giftBoxes.push(gift);
game.addChild(gift);
}
game.update = function () {
// Game logic updates here if needed
};