/**** * 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