/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Character = Container.expand(function (characterType) {
var self = Container.call(this);
var graphics = self.attachAsset(characterType, {
anchorX: 0.5,
anchorY: 0.5
});
self.animationTimer = 0;
self.bobDirection = 1;
self.update = function () {
// Idle bobbing animation
self.animationTimer += 0.05;
graphics.y = Math.sin(self.animationTimer) * 5;
// Slight scale breathing effect
var breathScale = 1 + Math.sin(self.animationTimer * 0.5) * 0.05;
graphics.scaleX = breathScale;
graphics.scaleY = breathScale;
};
self.down = function (x, y, obj) {
// Character interaction
tween(graphics, {
rotation: 0.2
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(graphics, {
rotation: 0
}, {
duration: 200,
easing: tween.easeIn
});
}
});
LK.getSound('pop').play();
};
return self;
});
var House = Container.expand(function (houseType, characterType) {
var self = Container.call(this);
// House background
var background = self.attachAsset(houseType, {
anchorX: 0.5,
anchorY: 0.5
});
// Character
var character = self.addChild(new Character(characterType));
character.x = 1024;
character.y = 600;
// Furniture array
self.furniture = [];
self.addFurniture = function (itemType, x, y) {
var item = self.addChild(new InteractiveItem(itemType));
item.x = x;
item.y = y;
self.furniture.push(item);
};
return self;
});
var InteractiveItem = Container.expand(function (itemType, color, width, height) {
var self = Container.call(this);
var graphics = self.attachAsset(itemType, {
anchorX: 0.5,
anchorY: 0.5
});
self.originalScale = 1;
self.isAnimating = false;
self.clickCount = 0;
self.down = function (x, y, obj) {
if (self.isAnimating) return;
self.isAnimating = true;
self.clickCount++;
// Scale animation
tween(graphics, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(graphics, {
scaleX: self.originalScale,
scaleY: self.originalScale
}, {
duration: 150,
easing: tween.easeIn,
onFinish: function onFinish() {
self.isAnimating = false;
}
});
}
});
// Special interactions for multiple clicks
if (self.clickCount >= 3) {
self.clickCount = 0;
self.triggerSpecialEffect();
}
LK.getSound('click').play();
};
self.triggerSpecialEffect = function () {
// Tint flash effect
var originalTint = graphics.tint;
graphics.tint = 0xFFFFFF;
tween(graphics, {
tint: originalTint
}, {
duration: 500,
easing: tween.easeOut
});
LK.getSound('chime').play();
};
return self;
});
var MenuButton = Container.expand(function (text, houseType) {
var self = Container.call(this);
var bg = self.attachAsset('menuButton', {
anchorX: 0.5,
anchorY: 0.5
});
var label = new Text2(text, {
size: 40,
fill: '#FFFFFF'
});
label.anchor.set(0.5, 0.5);
self.addChild(label);
self.houseType = houseType;
self.down = function (x, y, obj) {
tween(bg, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(bg, {
scaleX: 1,
scaleY: 1
}, {
duration: 100,
easing: tween.easeIn
});
}
});
if (self.houseType) {
showHouse(self.houseType);
} else {
showMainMenu();
}
LK.getSound('click').play();
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Sound effects
// Menu elements
// Furniture items
// Characters
// House backgrounds
var currentState = 'menu';
var currentHouse = null;
var menuContainer = null;
var backButton = null;
// House configurations
var houseConfigs = {
'pangoHouse': {
character: 'pango',
furniture: [{
type: 'sofa',
x: 400,
y: 900
}, {
type: 'table',
x: 700,
y: 1000
}, {
type: 'lamp',
x: 200,
y: 700
}, {
type: 'bookshelf',
x: 1600,
y: 800
}, {
type: 'plant',
x: 1800,
y: 1100
}]
},
'piggyHouse': {
character: 'piggy',
furniture: [{
type: 'bed',
x: 300,
y: 800
}, {
type: 'chair',
x: 600,
y: 1000
}, {
type: 'table',
x: 1000,
y: 900
}, {
type: 'clock',
x: 1500,
y: 600
}, {
type: 'plant',
x: 1700,
y: 1000
}]
},
'rabbitHouse': {
character: 'rabbit',
furniture: [{
type: 'sofa',
x: 500,
y: 1000
}, {
type: 'bookshelf',
x: 1400,
y: 700
}, {
type: 'lamp',
x: 800,
y: 600
}, {
type: 'table',
x: 1200,
y: 1100
}, {
type: 'plant',
x: 300,
y: 900
}]
},
'squirrelHouse': {
character: 'squirrel',
furniture: [{
type: 'chair',
x: 400,
y: 900
}, {
type: 'table',
x: 700,
y: 1000
}, {
type: 'bookshelf',
x: 1500,
y: 800
}, {
type: 'lamp',
x: 1800,
y: 700
}, {
type: 'clock',
x: 200,
y: 600
}]
},
'foxHouse': {
character: 'fox',
furniture: [{
type: 'bed',
x: 350,
y: 800
}, {
type: 'sofa',
x: 800,
y: 1000
}, {
type: 'table',
x: 1300,
y: 900
}, {
type: 'plant',
x: 1600,
y: 1100
}, {
type: 'lamp',
x: 500,
y: 600
}]
}
};
function showMainMenu() {
currentState = 'menu';
// Clear current house
if (currentHouse) {
currentHouse.destroy();
currentHouse = null;
}
// Hide back button
if (backButton) {
backButton.visible = false;
}
// Create menu if it doesn't exist
if (!menuContainer) {
menuContainer = game.addChild(new Container());
var title = new Text2('Pango Land', {
size: 80,
fill: '#FFFFFF'
});
title.anchor.set(0.5, 0.5);
title.x = 1024;
title.y = 300;
menuContainer.addChild(title);
var subtitle = new Text2('Choose a house to visit!', {
size: 40,
fill: '#FFFFFF'
});
subtitle.anchor.set(0.5, 0.5);
subtitle.x = 1024;
subtitle.y = 400;
menuContainer.addChild(subtitle);
// House buttons
var buttonData = [{
text: "Pango's House",
type: 'pangoHouse'
}, {
text: "Piggy's House",
type: 'piggyHouse'
}, {
text: "Rabbit's House",
type: 'rabbitHouse'
}, {
text: "Squirrel's House",
type: 'squirrelHouse'
}, {
text: "Fox's House",
type: 'foxHouse'
}];
for (var i = 0; i < buttonData.length; i++) {
var button = menuContainer.addChild(new MenuButton(buttonData[i].text, buttonData[i].type));
button.x = 1024;
button.y = 600 + i * 120;
}
}
menuContainer.visible = true;
}
function showHouse(houseType) {
currentState = 'house';
// Hide menu
if (menuContainer) {
menuContainer.visible = false;
}
// Create house
var config = houseConfigs[houseType];
currentHouse = game.addChild(new House(houseType, config.character));
currentHouse.x = 1024;
currentHouse.y = 900;
// Add furniture
for (var i = 0; i < config.furniture.length; i++) {
var furnitureItem = config.furniture[i];
currentHouse.addFurniture(furnitureItem.type, furnitureItem.x, furnitureItem.y);
}
// Show back button
if (!backButton) {
backButton = game.addChild(new MenuButton('Back', null));
backButton.x = 200;
backButton.y = 150;
}
backButton.visible = true;
}
// Initialize game
showMainMenu();
game.update = function () {
// Game loop handled by individual object updates
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Character = Container.expand(function (characterType) {
var self = Container.call(this);
var graphics = self.attachAsset(characterType, {
anchorX: 0.5,
anchorY: 0.5
});
self.animationTimer = 0;
self.bobDirection = 1;
self.update = function () {
// Idle bobbing animation
self.animationTimer += 0.05;
graphics.y = Math.sin(self.animationTimer) * 5;
// Slight scale breathing effect
var breathScale = 1 + Math.sin(self.animationTimer * 0.5) * 0.05;
graphics.scaleX = breathScale;
graphics.scaleY = breathScale;
};
self.down = function (x, y, obj) {
// Character interaction
tween(graphics, {
rotation: 0.2
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(graphics, {
rotation: 0
}, {
duration: 200,
easing: tween.easeIn
});
}
});
LK.getSound('pop').play();
};
return self;
});
var House = Container.expand(function (houseType, characterType) {
var self = Container.call(this);
// House background
var background = self.attachAsset(houseType, {
anchorX: 0.5,
anchorY: 0.5
});
// Character
var character = self.addChild(new Character(characterType));
character.x = 1024;
character.y = 600;
// Furniture array
self.furniture = [];
self.addFurniture = function (itemType, x, y) {
var item = self.addChild(new InteractiveItem(itemType));
item.x = x;
item.y = y;
self.furniture.push(item);
};
return self;
});
var InteractiveItem = Container.expand(function (itemType, color, width, height) {
var self = Container.call(this);
var graphics = self.attachAsset(itemType, {
anchorX: 0.5,
anchorY: 0.5
});
self.originalScale = 1;
self.isAnimating = false;
self.clickCount = 0;
self.down = function (x, y, obj) {
if (self.isAnimating) return;
self.isAnimating = true;
self.clickCount++;
// Scale animation
tween(graphics, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(graphics, {
scaleX: self.originalScale,
scaleY: self.originalScale
}, {
duration: 150,
easing: tween.easeIn,
onFinish: function onFinish() {
self.isAnimating = false;
}
});
}
});
// Special interactions for multiple clicks
if (self.clickCount >= 3) {
self.clickCount = 0;
self.triggerSpecialEffect();
}
LK.getSound('click').play();
};
self.triggerSpecialEffect = function () {
// Tint flash effect
var originalTint = graphics.tint;
graphics.tint = 0xFFFFFF;
tween(graphics, {
tint: originalTint
}, {
duration: 500,
easing: tween.easeOut
});
LK.getSound('chime').play();
};
return self;
});
var MenuButton = Container.expand(function (text, houseType) {
var self = Container.call(this);
var bg = self.attachAsset('menuButton', {
anchorX: 0.5,
anchorY: 0.5
});
var label = new Text2(text, {
size: 40,
fill: '#FFFFFF'
});
label.anchor.set(0.5, 0.5);
self.addChild(label);
self.houseType = houseType;
self.down = function (x, y, obj) {
tween(bg, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(bg, {
scaleX: 1,
scaleY: 1
}, {
duration: 100,
easing: tween.easeIn
});
}
});
if (self.houseType) {
showHouse(self.houseType);
} else {
showMainMenu();
}
LK.getSound('click').play();
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Sound effects
// Menu elements
// Furniture items
// Characters
// House backgrounds
var currentState = 'menu';
var currentHouse = null;
var menuContainer = null;
var backButton = null;
// House configurations
var houseConfigs = {
'pangoHouse': {
character: 'pango',
furniture: [{
type: 'sofa',
x: 400,
y: 900
}, {
type: 'table',
x: 700,
y: 1000
}, {
type: 'lamp',
x: 200,
y: 700
}, {
type: 'bookshelf',
x: 1600,
y: 800
}, {
type: 'plant',
x: 1800,
y: 1100
}]
},
'piggyHouse': {
character: 'piggy',
furniture: [{
type: 'bed',
x: 300,
y: 800
}, {
type: 'chair',
x: 600,
y: 1000
}, {
type: 'table',
x: 1000,
y: 900
}, {
type: 'clock',
x: 1500,
y: 600
}, {
type: 'plant',
x: 1700,
y: 1000
}]
},
'rabbitHouse': {
character: 'rabbit',
furniture: [{
type: 'sofa',
x: 500,
y: 1000
}, {
type: 'bookshelf',
x: 1400,
y: 700
}, {
type: 'lamp',
x: 800,
y: 600
}, {
type: 'table',
x: 1200,
y: 1100
}, {
type: 'plant',
x: 300,
y: 900
}]
},
'squirrelHouse': {
character: 'squirrel',
furniture: [{
type: 'chair',
x: 400,
y: 900
}, {
type: 'table',
x: 700,
y: 1000
}, {
type: 'bookshelf',
x: 1500,
y: 800
}, {
type: 'lamp',
x: 1800,
y: 700
}, {
type: 'clock',
x: 200,
y: 600
}]
},
'foxHouse': {
character: 'fox',
furniture: [{
type: 'bed',
x: 350,
y: 800
}, {
type: 'sofa',
x: 800,
y: 1000
}, {
type: 'table',
x: 1300,
y: 900
}, {
type: 'plant',
x: 1600,
y: 1100
}, {
type: 'lamp',
x: 500,
y: 600
}]
}
};
function showMainMenu() {
currentState = 'menu';
// Clear current house
if (currentHouse) {
currentHouse.destroy();
currentHouse = null;
}
// Hide back button
if (backButton) {
backButton.visible = false;
}
// Create menu if it doesn't exist
if (!menuContainer) {
menuContainer = game.addChild(new Container());
var title = new Text2('Pango Land', {
size: 80,
fill: '#FFFFFF'
});
title.anchor.set(0.5, 0.5);
title.x = 1024;
title.y = 300;
menuContainer.addChild(title);
var subtitle = new Text2('Choose a house to visit!', {
size: 40,
fill: '#FFFFFF'
});
subtitle.anchor.set(0.5, 0.5);
subtitle.x = 1024;
subtitle.y = 400;
menuContainer.addChild(subtitle);
// House buttons
var buttonData = [{
text: "Pango's House",
type: 'pangoHouse'
}, {
text: "Piggy's House",
type: 'piggyHouse'
}, {
text: "Rabbit's House",
type: 'rabbitHouse'
}, {
text: "Squirrel's House",
type: 'squirrelHouse'
}, {
text: "Fox's House",
type: 'foxHouse'
}];
for (var i = 0; i < buttonData.length; i++) {
var button = menuContainer.addChild(new MenuButton(buttonData[i].text, buttonData[i].type));
button.x = 1024;
button.y = 600 + i * 120;
}
}
menuContainer.visible = true;
}
function showHouse(houseType) {
currentState = 'house';
// Hide menu
if (menuContainer) {
menuContainer.visible = false;
}
// Create house
var config = houseConfigs[houseType];
currentHouse = game.addChild(new House(houseType, config.character));
currentHouse.x = 1024;
currentHouse.y = 900;
// Add furniture
for (var i = 0; i < config.furniture.length; i++) {
var furnitureItem = config.furniture[i];
currentHouse.addFurniture(furnitureItem.type, furnitureItem.x, furnitureItem.y);
}
// Show back button
if (!backButton) {
backButton = game.addChild(new MenuButton('Back', null));
backButton.x = 200;
backButton.y = 150;
}
backButton.visible = true;
}
// Initialize game
showMainMenu();
game.update = function () {
// Game loop handled by individual object updates
};