/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var CalendarDoor = Container.expand(function (doorNumber) {
var self = Container.call(this);
self.doorNumber = doorNumber;
self.isOpen = false;
// Create door frame
var frame = self.attachAsset('doorFrame', {
anchorX: 0.5,
anchorY: 0.5
});
// Create door
var door = self.attachAsset('door', {
anchorX: 0.5,
anchorY: 0.5
});
// Create door number text
var numberText = new Text2(doorNumber.toString(), {
size: 60,
fill: 0xFFFFFF
});
numberText.anchor.set(0.5, 0.5);
self.addChild(numberText);
// Create hidden character
var characterTypes = ['character1', 'character2', 'character3', 'character4', 'character5', 'pango'];
var characterType = characterTypes[doorNumber % characterTypes.length];
var character = self.attachAsset(characterType, {
anchorX: 0.5,
anchorY: 0.5
});
character.alpha = 0;
character.visible = false;
self.openDoor = function () {
if (self.isOpen) return;
self.isOpen = true;
// Play door open sound
LK.getSound('doorOpen').play();
// Animate door opening
tween(door, {
scaleX: 0,
alpha: 0
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
door.visible = false;
numberText.visible = false;
// Show character
character.visible = true;
character.alpha = 0;
character.scaleX = 0.1;
character.scaleY = 0.1;
// Play reveal sound
LK.getSound('reveal').play();
// Animate character reveal
tween(character, {
alpha: 1,
scaleX: 1,
scaleY: 1
}, {
duration: 400,
easing: tween.bounceOut
});
}
});
};
self.down = function (x, y, obj) {
if (!self.isOpen) {
self.openDoor();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x0f3460
});
/****
* Game Code
****/
// Create festive background
var background = game.attachAsset('calendarBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366
});
// Create title
var titleText = new Text2("Pango's Advent Calendar", {
size: 80,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0);
titleText.x = 1024;
titleText.y = 150;
game.addChild(titleText);
// Create calendar doors array
var doors = [];
// Create 31 doors in a grid layout
var doorsPerRow = 6;
var doorSpacing = 220;
var startX = 200;
var startY = 400;
for (var i = 1; i <= 31; i++) {
var door = new CalendarDoor(i);
var row = Math.floor((i - 1) / doorsPerRow);
var col = (i - 1) % doorsPerRow;
door.x = startX + col * doorSpacing;
door.y = startY + row * doorSpacing;
doors.push(door);
game.addChild(door);
}
// Create Pango character in corner
var pangoCharacter = game.attachAsset('pango', {
anchorX: 0.5,
anchorY: 0.5,
x: 1800,
y: 300
});
// Add some floating animation to Pango
var pangoFloatUp = true;
var pangoBaseY = 300;
game.update = function () {
// Animate Pango floating
if (LK.ticks % 60 === 0) {
if (pangoFloatUp) {
tween(pangoCharacter, {
y: pangoBaseY - 20
}, {
duration: 1000,
easing: tween.easeInOut
});
} else {
tween(pangoCharacter, {
y: pangoBaseY + 20
}, {
duration: 1000,
easing: tween.easeInOut
});
}
pangoFloatUp = !pangoFloatUp;
}
};
// Create instruction text
var instructionText = new Text2("Tap doors 1-31 to discover surprises!", {
size: 45,
fill: 0xFFFF99
});
instructionText.anchor.set(0.5, 0);
instructionText.x = 1024;
instructionText.y = 250;
game.addChild(instructionText); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,162 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var CalendarDoor = Container.expand(function (doorNumber) {
+ var self = Container.call(this);
+ self.doorNumber = doorNumber;
+ self.isOpen = false;
+ // Create door frame
+ var frame = self.attachAsset('doorFrame', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Create door
+ var door = self.attachAsset('door', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Create door number text
+ var numberText = new Text2(doorNumber.toString(), {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ numberText.anchor.set(0.5, 0.5);
+ self.addChild(numberText);
+ // Create hidden character
+ var characterTypes = ['character1', 'character2', 'character3', 'character4', 'character5', 'pango'];
+ var characterType = characterTypes[doorNumber % characterTypes.length];
+ var character = self.attachAsset(characterType, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ character.alpha = 0;
+ character.visible = false;
+ self.openDoor = function () {
+ if (self.isOpen) return;
+ self.isOpen = true;
+ // Play door open sound
+ LK.getSound('doorOpen').play();
+ // Animate door opening
+ tween(door, {
+ scaleX: 0,
+ alpha: 0
+ }, {
+ duration: 300,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ door.visible = false;
+ numberText.visible = false;
+ // Show character
+ character.visible = true;
+ character.alpha = 0;
+ character.scaleX = 0.1;
+ character.scaleY = 0.1;
+ // Play reveal sound
+ LK.getSound('reveal').play();
+ // Animate character reveal
+ tween(character, {
+ alpha: 1,
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 400,
+ easing: tween.bounceOut
+ });
+ }
+ });
+ };
+ self.down = function (x, y, obj) {
+ if (!self.isOpen) {
+ self.openDoor();
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x0f3460
+});
+
+/****
+* Game Code
+****/
+// Create festive background
+var background = game.attachAsset('calendarBackground', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 1024,
+ y: 1366
+});
+// Create title
+var titleText = new Text2("Pango's Advent Calendar", {
+ size: 80,
+ fill: 0xFFFFFF
+});
+titleText.anchor.set(0.5, 0);
+titleText.x = 1024;
+titleText.y = 150;
+game.addChild(titleText);
+// Create calendar doors array
+var doors = [];
+// Create 31 doors in a grid layout
+var doorsPerRow = 6;
+var doorSpacing = 220;
+var startX = 200;
+var startY = 400;
+for (var i = 1; i <= 31; i++) {
+ var door = new CalendarDoor(i);
+ var row = Math.floor((i - 1) / doorsPerRow);
+ var col = (i - 1) % doorsPerRow;
+ door.x = startX + col * doorSpacing;
+ door.y = startY + row * doorSpacing;
+ doors.push(door);
+ game.addChild(door);
+}
+// Create Pango character in corner
+var pangoCharacter = game.attachAsset('pango', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 1800,
+ y: 300
+});
+// Add some floating animation to Pango
+var pangoFloatUp = true;
+var pangoBaseY = 300;
+game.update = function () {
+ // Animate Pango floating
+ if (LK.ticks % 60 === 0) {
+ if (pangoFloatUp) {
+ tween(pangoCharacter, {
+ y: pangoBaseY - 20
+ }, {
+ duration: 1000,
+ easing: tween.easeInOut
+ });
+ } else {
+ tween(pangoCharacter, {
+ y: pangoBaseY + 20
+ }, {
+ duration: 1000,
+ easing: tween.easeInOut
+ });
+ }
+ pangoFloatUp = !pangoFloatUp;
+ }
+};
+// Create instruction text
+var instructionText = new Text2("Tap doors 1-31 to discover surprises!", {
+ size: 45,
+ fill: 0xFFFF99
+});
+instructionText.anchor.set(0.5, 0);
+instructionText.x = 1024;
+instructionText.y = 250;
+game.addChild(instructionText);
\ No newline at end of file