/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Camera = Container.expand(function () { var self = Container.call(this); var cameraGraphics = self.attachAsset('camera', { anchorX: 0.5, anchorY: 0.5 }); var lensText = new Text2('📷', { size: 40, fill: 0xFFFFFF }); lensText.anchor.set(0.5, 0.5); self.addChild(lensText); self.down = function (x, y, obj) { LK.getSound('cameraClick').play(); LK.effects.flashScreen(0xFFFFFF, 300); tween(self, { scaleX: 0.8, scaleY: 0.8 }, { duration: 150, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 150 }); } }); }; return self; }); var Character = Container.expand(function (name, hairColor) { var self = Container.call(this); self.name = name; self.wornItems = []; var body = self.attachAsset('characterBase', { anchorX: 0.5, anchorY: 1 }); var hair = self.attachAsset(name === 'Ginger' ? 'gingerHair' : 'harveyHair', { anchorX: 0.5, anchorY: 0.5, y: -480 }); self.addClothing = function (item) { if (item.type === 'shirt') { item.x = 0; item.y = -300; } else if (item.type === 'pants') { item.x = 0; item.y = -150; } else if (item.type === 'dress') { item.x = 0; item.y = -200; } else if (item.type === 'hat') { item.x = 0; item.y = -520; } else if (item.type === 'shoes') { item.x = 0; item.y = 0; } self.addChild(item); item.isWorn = true; self.wornItems.push(item); LK.getSound('dressSound').play(); }; self.removeClothing = function (item) { if (item.isWorn) { var index = self.wornItems.indexOf(item); if (index > -1) { self.wornItems.splice(index, 1); } item.isWorn = false; self.removeChild(item); closet.addChild(item); item.x = Math.random() * 200 - 100; item.y = Math.random() * 300 - 150; } }; return self; }); var ClothingItem = Container.expand(function (type, color, size) { var self = Container.call(this); self.type = type; self.originalParent = null; self.isWorn = false; var itemGraphics = self.attachAsset('clothingItem', { anchorX: 0.5, anchorY: 0.5, scaleX: size || 1, scaleY: size || 1 }); if (color) { itemGraphics.tint = color; } self.down = function (x, y, obj) { if (!self.isWorn) { draggedItem = self; dragOffset.x = x; dragOffset.y = y; LK.getSound('clickSound').play(); } }; return self; }); var Jukebox = Container.expand(function () { var self = Container.call(this); self.currentTrack = 0; self.tracks = ['jukebox1', 'jukebox2', 'jukebox3']; var jukeboxGraphics = self.attachAsset('jukebox', { anchorX: 0.5, anchorY: 0.5 }); var playText = new Text2('♪', { size: 60, fill: 0xFFD700 }); playText.anchor.set(0.5, 0.5); self.addChild(playText); self.down = function (x, y, obj) { self.currentTrack = (self.currentTrack + 1) % self.tracks.length; LK.playMusic(self.tracks[self.currentTrack]); LK.getSound('clickSound').play(); tween(playText, { scaleX: 1.3, scaleY: 1.3 }, { duration: 200, onFinish: function onFinish() { tween(playText, { scaleX: 1, scaleY: 1 }, { duration: 200 }); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xF5E6D3 }); /**** * Game Code ****/ var gameState = 'characterSelect'; var selectedCharacter = null; var ginger = null; var harvey = null; var closet = null; var draggedItem = null; var dragOffset = { x: 0, y: 0 }; var jukebox = null; var camera = null; var clothingItems = []; // Character selection buttons var gingerButton = game.addChild(LK.getAsset('selectButton', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 4, y: 2732 / 2, tint: 0xFF69B4 })); var gingerText = new Text2('Ginger', { size: 40, fill: 0xFFFFFF }); gingerText.anchor.set(0.5, 0.5); gingerButton.addChild(gingerText); var harveyButton = game.addChild(LK.getAsset('selectButton', { anchorX: 0.5, anchorY: 0.5, x: 3 * 2048 / 4, y: 2732 / 2, tint: 0x4169E1 })); var harveyText = new Text2('Harvey', { size: 40, fill: 0xFFFFFF }); harveyText.anchor.set(0.5, 0.5); harveyButton.addChild(harveyText); var titleText = new Text2('Choose Your Character', { size: 80, fill: 0x8B4513 }); titleText.anchor.set(0.5, 0.5); titleText.x = 2048 / 2; titleText.y = 2732 / 3; game.addChild(titleText); function initializeGame() { // Remove selection UI game.removeChild(gingerButton); game.removeChild(harveyButton); game.removeChild(titleText); // Create characters ginger = new Character('Ginger', 0xD2691E); harvey = new Character('Harvey', 0x8B4513); // Position selected character if (selectedCharacter === 'Ginger') { ginger.x = 2048 / 2; ginger.y = 2732 - 200; game.addChild(ginger); } else { harvey.x = 2048 / 2; harvey.y = 2732 - 200; game.addChild(harvey); } // Create closet closet = game.addChild(LK.getAsset('closet', { anchorX: 0.5, anchorY: 0.5, x: 150, y: 2732 / 2 })); // Create clothing items var clothing = [{ type: 'shirt', color: 0x4169E1, count: 3 }, { type: 'pants', color: 0x2F4F4F, count: 2 }, { type: 'dress', color: 0xFF69B4, count: 2 }, { type: 'hat', color: 0x8B0000, count: 2 }, { type: 'shoes', color: 0x654321, count: 2 }]; clothing.forEach(function (clothingType, typeIndex) { for (var i = 0; i < clothingType.count; i++) { var item = new ClothingItem(clothingType.type, clothingType.color, 0.8); item.x = i * 80 - 100; item.y = typeIndex * 80 - 200; closet.addChild(item); clothingItems.push(item); } }); // Create jukebox jukebox = game.addChild(new Jukebox()); jukebox.x = 2048 - 150; jukebox.y = 300; // Create camera camera = game.addChild(new Camera()); camera.x = 2048 - 150; camera.y = 2732 - 300; gameState = 'dressup'; } game.down = function (x, y, obj) { if (gameState === 'characterSelect') { var localPos = gingerButton.toLocal({ x: x, y: y }); if (localPos.x >= -100 && localPos.x <= 100 && localPos.y >= -40 && localPos.y <= 40) { selectedCharacter = 'Ginger'; LK.getSound('clickSound').play(); initializeGame(); return; } localPos = harveyButton.toLocal({ x: x, y: y }); if (localPos.x >= -100 && localPos.x <= 100 && localPos.y >= -40 && localPos.y <= 40) { selectedCharacter = 'Harvey'; LK.getSound('clickSound').play(); initializeGame(); return; } } }; game.move = function (x, y, obj) { if (draggedItem && gameState === 'dressup') { draggedItem.x = x - dragOffset.x; draggedItem.y = y - dragOffset.y; } }; game.up = function (x, y, obj) { if (draggedItem && gameState === 'dressup') { var currentChar = selectedCharacter === 'Ginger' ? ginger : harvey; var charBounds = currentChar.getBounds(); if (x >= charBounds.x && x <= charBounds.x + charBounds.width && y >= charBounds.y && y <= charBounds.y + charBounds.height) { if (draggedItem.originalParent) { draggedItem.originalParent.removeChild(draggedItem); } else { closet.removeChild(draggedItem); } currentChar.addClothing(draggedItem); } draggedItem = null; } }; game.update = function () { // Update game logic here if needed }; // Start with first music track LK.playMusic('jukebox1');
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Camera = Container.expand(function () {
var self = Container.call(this);
var cameraGraphics = self.attachAsset('camera', {
anchorX: 0.5,
anchorY: 0.5
});
var lensText = new Text2('📷', {
size: 40,
fill: 0xFFFFFF
});
lensText.anchor.set(0.5, 0.5);
self.addChild(lensText);
self.down = function (x, y, obj) {
LK.getSound('cameraClick').play();
LK.effects.flashScreen(0xFFFFFF, 300);
tween(self, {
scaleX: 0.8,
scaleY: 0.8
}, {
duration: 150,
onFinish: function onFinish() {
tween(self, {
scaleX: 1,
scaleY: 1
}, {
duration: 150
});
}
});
};
return self;
});
var Character = Container.expand(function (name, hairColor) {
var self = Container.call(this);
self.name = name;
self.wornItems = [];
var body = self.attachAsset('characterBase', {
anchorX: 0.5,
anchorY: 1
});
var hair = self.attachAsset(name === 'Ginger' ? 'gingerHair' : 'harveyHair', {
anchorX: 0.5,
anchorY: 0.5,
y: -480
});
self.addClothing = function (item) {
if (item.type === 'shirt') {
item.x = 0;
item.y = -300;
} else if (item.type === 'pants') {
item.x = 0;
item.y = -150;
} else if (item.type === 'dress') {
item.x = 0;
item.y = -200;
} else if (item.type === 'hat') {
item.x = 0;
item.y = -520;
} else if (item.type === 'shoes') {
item.x = 0;
item.y = 0;
}
self.addChild(item);
item.isWorn = true;
self.wornItems.push(item);
LK.getSound('dressSound').play();
};
self.removeClothing = function (item) {
if (item.isWorn) {
var index = self.wornItems.indexOf(item);
if (index > -1) {
self.wornItems.splice(index, 1);
}
item.isWorn = false;
self.removeChild(item);
closet.addChild(item);
item.x = Math.random() * 200 - 100;
item.y = Math.random() * 300 - 150;
}
};
return self;
});
var ClothingItem = Container.expand(function (type, color, size) {
var self = Container.call(this);
self.type = type;
self.originalParent = null;
self.isWorn = false;
var itemGraphics = self.attachAsset('clothingItem', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: size || 1,
scaleY: size || 1
});
if (color) {
itemGraphics.tint = color;
}
self.down = function (x, y, obj) {
if (!self.isWorn) {
draggedItem = self;
dragOffset.x = x;
dragOffset.y = y;
LK.getSound('clickSound').play();
}
};
return self;
});
var Jukebox = Container.expand(function () {
var self = Container.call(this);
self.currentTrack = 0;
self.tracks = ['jukebox1', 'jukebox2', 'jukebox3'];
var jukeboxGraphics = self.attachAsset('jukebox', {
anchorX: 0.5,
anchorY: 0.5
});
var playText = new Text2('♪', {
size: 60,
fill: 0xFFD700
});
playText.anchor.set(0.5, 0.5);
self.addChild(playText);
self.down = function (x, y, obj) {
self.currentTrack = (self.currentTrack + 1) % self.tracks.length;
LK.playMusic(self.tracks[self.currentTrack]);
LK.getSound('clickSound').play();
tween(playText, {
scaleX: 1.3,
scaleY: 1.3
}, {
duration: 200,
onFinish: function onFinish() {
tween(playText, {
scaleX: 1,
scaleY: 1
}, {
duration: 200
});
}
});
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xF5E6D3
});
/****
* Game Code
****/
var gameState = 'characterSelect';
var selectedCharacter = null;
var ginger = null;
var harvey = null;
var closet = null;
var draggedItem = null;
var dragOffset = {
x: 0,
y: 0
};
var jukebox = null;
var camera = null;
var clothingItems = [];
// Character selection buttons
var gingerButton = game.addChild(LK.getAsset('selectButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 4,
y: 2732 / 2,
tint: 0xFF69B4
}));
var gingerText = new Text2('Ginger', {
size: 40,
fill: 0xFFFFFF
});
gingerText.anchor.set(0.5, 0.5);
gingerButton.addChild(gingerText);
var harveyButton = game.addChild(LK.getAsset('selectButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 3 * 2048 / 4,
y: 2732 / 2,
tint: 0x4169E1
}));
var harveyText = new Text2('Harvey', {
size: 40,
fill: 0xFFFFFF
});
harveyText.anchor.set(0.5, 0.5);
harveyButton.addChild(harveyText);
var titleText = new Text2('Choose Your Character', {
size: 80,
fill: 0x8B4513
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 2732 / 3;
game.addChild(titleText);
function initializeGame() {
// Remove selection UI
game.removeChild(gingerButton);
game.removeChild(harveyButton);
game.removeChild(titleText);
// Create characters
ginger = new Character('Ginger', 0xD2691E);
harvey = new Character('Harvey', 0x8B4513);
// Position selected character
if (selectedCharacter === 'Ginger') {
ginger.x = 2048 / 2;
ginger.y = 2732 - 200;
game.addChild(ginger);
} else {
harvey.x = 2048 / 2;
harvey.y = 2732 - 200;
game.addChild(harvey);
}
// Create closet
closet = game.addChild(LK.getAsset('closet', {
anchorX: 0.5,
anchorY: 0.5,
x: 150,
y: 2732 / 2
}));
// Create clothing items
var clothing = [{
type: 'shirt',
color: 0x4169E1,
count: 3
}, {
type: 'pants',
color: 0x2F4F4F,
count: 2
}, {
type: 'dress',
color: 0xFF69B4,
count: 2
}, {
type: 'hat',
color: 0x8B0000,
count: 2
}, {
type: 'shoes',
color: 0x654321,
count: 2
}];
clothing.forEach(function (clothingType, typeIndex) {
for (var i = 0; i < clothingType.count; i++) {
var item = new ClothingItem(clothingType.type, clothingType.color, 0.8);
item.x = i * 80 - 100;
item.y = typeIndex * 80 - 200;
closet.addChild(item);
clothingItems.push(item);
}
});
// Create jukebox
jukebox = game.addChild(new Jukebox());
jukebox.x = 2048 - 150;
jukebox.y = 300;
// Create camera
camera = game.addChild(new Camera());
camera.x = 2048 - 150;
camera.y = 2732 - 300;
gameState = 'dressup';
}
game.down = function (x, y, obj) {
if (gameState === 'characterSelect') {
var localPos = gingerButton.toLocal({
x: x,
y: y
});
if (localPos.x >= -100 && localPos.x <= 100 && localPos.y >= -40 && localPos.y <= 40) {
selectedCharacter = 'Ginger';
LK.getSound('clickSound').play();
initializeGame();
return;
}
localPos = harveyButton.toLocal({
x: x,
y: y
});
if (localPos.x >= -100 && localPos.x <= 100 && localPos.y >= -40 && localPos.y <= 40) {
selectedCharacter = 'Harvey';
LK.getSound('clickSound').play();
initializeGame();
return;
}
}
};
game.move = function (x, y, obj) {
if (draggedItem && gameState === 'dressup') {
draggedItem.x = x - dragOffset.x;
draggedItem.y = y - dragOffset.y;
}
};
game.up = function (x, y, obj) {
if (draggedItem && gameState === 'dressup') {
var currentChar = selectedCharacter === 'Ginger' ? ginger : harvey;
var charBounds = currentChar.getBounds();
if (x >= charBounds.x && x <= charBounds.x + charBounds.width && y >= charBounds.y && y <= charBounds.y + charBounds.height) {
if (draggedItem.originalParent) {
draggedItem.originalParent.removeChild(draggedItem);
} else {
closet.removeChild(draggedItem);
}
currentChar.addClothing(draggedItem);
}
draggedItem = null;
}
};
game.update = function () {
// Update game logic here if needed
};
// Start with first music track
LK.playMusic('jukebox1');