/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Character = Container.expand(function (type) { var self = Container.call(this); var face = self.attachAsset('character' + type, { anchorX: 0.5, anchorY: 0.5 }); var hair = self.attachAsset('hair' + type, { anchorX: 0.5, anchorY: 0.8 }); hair.y = -150; self.hair = hair; self.originalHairColor = hair.tint; self.accessories = []; self.changeHairColor = function (color) { self.hair.tint = color; }; self.addAccessory = function (accessoryType, x, y) { var accessory = LK.getAsset(accessoryType, { anchorX: 0.5, anchorY: 0.5 }); accessory.x = x; accessory.y = y; self.addChild(accessory); self.accessories.push(accessory); }; self.clearAccessories = function () { for (var i = 0; i < self.accessories.length; i++) { self.accessories[i].destroy(); } self.accessories = []; }; self.reset = function () { self.hair.tint = self.originalHairColor; self.clearAccessories(); }; return self; }); var ColorSwatch = Container.expand(function (color) { var self = Container.call(this); var swatch = self.attachAsset('colorwheel', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.6, scaleY: 0.6 }); swatch.tint = color; self.color = color; self.down = function (x, y, obj) { LK.getSound('click').play(); if (currentCharacter) { currentCharacter.changeHairColor(self.color); LK.getSound('spray').play(); } }; return self; }); var Tool = Container.expand(function (type) { var self = Container.call(this); var graphic = self.attachAsset(type, { anchorX: 0.5, anchorY: 0.5 }); self.type = type; self.isSelected = false; self.select = function () { self.isSelected = true; graphic.tint = 0xFFFF00; tween(self, { scaleX: 1.2, scaleY: 1.2 }, { duration: 200 }); }; self.deselect = function () { self.isSelected = false; graphic.tint = 0xFFFFFF; tween(self, { scaleX: 1, scaleY: 1 }, { duration: 200 }); }; self.down = function (x, y, obj) { LK.getSound('click').play(); selectTool(self.type); }; return self; }); var UIButton = Container.expand(function (text, action) { var self = Container.call(this); var button = self.attachAsset('button', { anchorX: 0.5, anchorY: 0.5 }); var label = new Text2(text, { size: 40, fill: 0x000000 }); label.anchor.set(0.5, 0.5); self.addChild(label); self.action = action; self.down = function (x, y, obj) { LK.getSound('click').play(); tween(self, { scaleX: 0.9, scaleY: 0.9 }, { duration: 100, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 100 }); } }); self.action(); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xFFF8DC }); /**** * Game Code ****/ // Sound assets // UI assets // Accessory assets // Tool assets // Hair assets // Character assets var currentCharacter = null; var selectedTool = null; var tools = []; var colorSwatches = []; var characters = []; var gameState = 'characterSelect'; // 'characterSelect', 'styling' // Character selection var characterSelectTitle = new Text2('Choose Your Character', { size: 80, fill: 0x8B4513 }); characterSelectTitle.anchor.set(0.5, 0.5); characterSelectTitle.x = 2048 / 2; characterSelectTitle.y = 200; game.addChild(characterSelectTitle); // Create character selection buttons for (var i = 1; i <= 3; i++) { var charPreview = new Character(i); charPreview.x = 400 + (i - 1) * 500; charPreview.y = 600; charPreview.scaleX = 0.6; charPreview.scaleY = 0.6; charPreview.characterType = i; charPreview.down = function (x, y, obj) { LK.getSound('click').play(); startStyling(obj.characterType); }; game.addChild(charPreview); characters.push(charPreview); } // Tools panel (hidden initially) var toolsPanel = new Container(); toolsPanel.x = 100; toolsPanel.y = 400; toolsPanel.visible = false; game.addChild(toolsPanel); var toolTypes = ['scissors', 'brush', 'hairdryer', 'curlingiron', 'spraypaint']; for (var i = 0; i < toolTypes.length; i++) { var tool = new Tool(toolTypes[i]); tool.x = 0; tool.y = i * 150; toolsPanel.addChild(tool); tools.push(tool); } // Color panel (hidden initially) var colorPanel = new Container(); colorPanel.x = 1800; colorPanel.y = 400; colorPanel.visible = false; game.addChild(colorPanel); var colors = [0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF, 0xFFA500, 0x800080, 0xFFC0CB]; for (var i = 0; i < colors.length; i++) { var colorSwatch = new ColorSwatch(colors[i]); colorSwatch.x = i % 3 * 100; colorSwatch.y = Math.floor(i / 3) * 100; colorPanel.addChild(colorSwatch); colorSwatches.push(colorSwatch); } // Accessories panel (hidden initially) var accessoriesPanel = new Container(); accessoriesPanel.x = 1800; accessoriesPanel.y = 800; accessoriesPanel.visible = false; game.addChild(accessoriesPanel); var accessoryTypes = ['bow', 'headband', 'clip']; for (var i = 0; i < accessoryTypes.length; i++) { var accessoryButton = LK.getAsset(accessoryTypes[i], { anchorX: 0.5, anchorY: 0.5 }); accessoryButton.x = i % 2 * 120; accessoryButton.y = Math.floor(i / 2) * 80; accessoryButton.accessoryType = accessoryTypes[i]; accessoryButton.down = function (x, y, obj) { LK.getSound('click').play(); selectedTool = 'accessory'; selectedAccessory = obj.accessoryType; }; accessoriesPanel.addChild(accessoryButton); } // Control buttons var resetButton = new UIButton('Reset', function () { if (currentCharacter) { currentCharacter.reset(); } }); resetButton.x = 1024; resetButton.y = 2500; resetButton.visible = false; game.addChild(resetButton); var backButton = new UIButton('Back', function () { gameState = 'characterSelect'; showCharacterSelect(); }); backButton.x = 300; backButton.y = 2500; backButton.visible = false; game.addChild(backButton); // Title for styling mode var stylingTitle = new Text2('Hair Salon Studio', { size: 60, fill: 0x8B4513 }); stylingTitle.anchor.set(0.5, 0.5); stylingTitle.x = 2048 / 2; stylingTitle.y = 100; stylingTitle.visible = false; game.addChild(stylingTitle); var selectedAccessory = null; function startStyling(characterType) { gameState = 'styling'; // Hide character selection characterSelectTitle.visible = false; for (var i = 0; i < characters.length; i++) { characters[i].visible = false; } // Show styling interface currentCharacter = new Character(characterType); currentCharacter.x = 1024; currentCharacter.y = 800; game.addChild(currentCharacter); toolsPanel.visible = true; colorPanel.visible = true; accessoriesPanel.visible = true; resetButton.visible = true; backButton.visible = true; stylingTitle.visible = true; } function showCharacterSelect() { // Hide styling interface if (currentCharacter) { currentCharacter.destroy(); currentCharacter = null; } toolsPanel.visible = false; colorPanel.visible = false; accessoriesPanel.visible = false; resetButton.visible = false; backButton.visible = false; stylingTitle.visible = false; // Show character selection characterSelectTitle.visible = true; for (var i = 0; i < characters.length; i++) { characters[i].visible = true; } // Reset tool selection selectedTool = null; for (var i = 0; i < tools.length; i++) { tools[i].deselect(); } } function selectTool(toolType) { selectedTool = toolType; for (var i = 0; i < tools.length; i++) { if (tools[i].type === toolType) { tools[i].select(); } else { tools[i].deselect(); } } } game.down = function (x, y, obj) { if (gameState === 'styling' && currentCharacter && selectedTool === 'accessory' && selectedAccessory) { var localPos = currentCharacter.toLocal(obj.position); currentCharacter.addAccessory(selectedAccessory, localPos.x, localPos.y); LK.getSound('click').play(); } if (gameState === 'styling' && currentCharacter && selectedTool === 'scissors') { LK.getSound('cut').play(); LK.effects.flashObject(currentCharacter.hair, 0xFFFFFF, 300); } }; game.update = function () { // Game loop updates if needed };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Character = Container.expand(function (type) {
var self = Container.call(this);
var face = self.attachAsset('character' + type, {
anchorX: 0.5,
anchorY: 0.5
});
var hair = self.attachAsset('hair' + type, {
anchorX: 0.5,
anchorY: 0.8
});
hair.y = -150;
self.hair = hair;
self.originalHairColor = hair.tint;
self.accessories = [];
self.changeHairColor = function (color) {
self.hair.tint = color;
};
self.addAccessory = function (accessoryType, x, y) {
var accessory = LK.getAsset(accessoryType, {
anchorX: 0.5,
anchorY: 0.5
});
accessory.x = x;
accessory.y = y;
self.addChild(accessory);
self.accessories.push(accessory);
};
self.clearAccessories = function () {
for (var i = 0; i < self.accessories.length; i++) {
self.accessories[i].destroy();
}
self.accessories = [];
};
self.reset = function () {
self.hair.tint = self.originalHairColor;
self.clearAccessories();
};
return self;
});
var ColorSwatch = Container.expand(function (color) {
var self = Container.call(this);
var swatch = self.attachAsset('colorwheel', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.6,
scaleY: 0.6
});
swatch.tint = color;
self.color = color;
self.down = function (x, y, obj) {
LK.getSound('click').play();
if (currentCharacter) {
currentCharacter.changeHairColor(self.color);
LK.getSound('spray').play();
}
};
return self;
});
var Tool = Container.expand(function (type) {
var self = Container.call(this);
var graphic = self.attachAsset(type, {
anchorX: 0.5,
anchorY: 0.5
});
self.type = type;
self.isSelected = false;
self.select = function () {
self.isSelected = true;
graphic.tint = 0xFFFF00;
tween(self, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200
});
};
self.deselect = function () {
self.isSelected = false;
graphic.tint = 0xFFFFFF;
tween(self, {
scaleX: 1,
scaleY: 1
}, {
duration: 200
});
};
self.down = function (x, y, obj) {
LK.getSound('click').play();
selectTool(self.type);
};
return self;
});
var UIButton = Container.expand(function (text, action) {
var self = Container.call(this);
var button = self.attachAsset('button', {
anchorX: 0.5,
anchorY: 0.5
});
var label = new Text2(text, {
size: 40,
fill: 0x000000
});
label.anchor.set(0.5, 0.5);
self.addChild(label);
self.action = action;
self.down = function (x, y, obj) {
LK.getSound('click').play();
tween(self, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100,
onFinish: function onFinish() {
tween(self, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
}
});
self.action();
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xFFF8DC
});
/****
* Game Code
****/
// Sound assets
// UI assets
// Accessory assets
// Tool assets
// Hair assets
// Character assets
var currentCharacter = null;
var selectedTool = null;
var tools = [];
var colorSwatches = [];
var characters = [];
var gameState = 'characterSelect'; // 'characterSelect', 'styling'
// Character selection
var characterSelectTitle = new Text2('Choose Your Character', {
size: 80,
fill: 0x8B4513
});
characterSelectTitle.anchor.set(0.5, 0.5);
characterSelectTitle.x = 2048 / 2;
characterSelectTitle.y = 200;
game.addChild(characterSelectTitle);
// Create character selection buttons
for (var i = 1; i <= 3; i++) {
var charPreview = new Character(i);
charPreview.x = 400 + (i - 1) * 500;
charPreview.y = 600;
charPreview.scaleX = 0.6;
charPreview.scaleY = 0.6;
charPreview.characterType = i;
charPreview.down = function (x, y, obj) {
LK.getSound('click').play();
startStyling(obj.characterType);
};
game.addChild(charPreview);
characters.push(charPreview);
}
// Tools panel (hidden initially)
var toolsPanel = new Container();
toolsPanel.x = 100;
toolsPanel.y = 400;
toolsPanel.visible = false;
game.addChild(toolsPanel);
var toolTypes = ['scissors', 'brush', 'hairdryer', 'curlingiron', 'spraypaint'];
for (var i = 0; i < toolTypes.length; i++) {
var tool = new Tool(toolTypes[i]);
tool.x = 0;
tool.y = i * 150;
toolsPanel.addChild(tool);
tools.push(tool);
}
// Color panel (hidden initially)
var colorPanel = new Container();
colorPanel.x = 1800;
colorPanel.y = 400;
colorPanel.visible = false;
game.addChild(colorPanel);
var colors = [0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF, 0xFFA500, 0x800080, 0xFFC0CB];
for (var i = 0; i < colors.length; i++) {
var colorSwatch = new ColorSwatch(colors[i]);
colorSwatch.x = i % 3 * 100;
colorSwatch.y = Math.floor(i / 3) * 100;
colorPanel.addChild(colorSwatch);
colorSwatches.push(colorSwatch);
}
// Accessories panel (hidden initially)
var accessoriesPanel = new Container();
accessoriesPanel.x = 1800;
accessoriesPanel.y = 800;
accessoriesPanel.visible = false;
game.addChild(accessoriesPanel);
var accessoryTypes = ['bow', 'headband', 'clip'];
for (var i = 0; i < accessoryTypes.length; i++) {
var accessoryButton = LK.getAsset(accessoryTypes[i], {
anchorX: 0.5,
anchorY: 0.5
});
accessoryButton.x = i % 2 * 120;
accessoryButton.y = Math.floor(i / 2) * 80;
accessoryButton.accessoryType = accessoryTypes[i];
accessoryButton.down = function (x, y, obj) {
LK.getSound('click').play();
selectedTool = 'accessory';
selectedAccessory = obj.accessoryType;
};
accessoriesPanel.addChild(accessoryButton);
}
// Control buttons
var resetButton = new UIButton('Reset', function () {
if (currentCharacter) {
currentCharacter.reset();
}
});
resetButton.x = 1024;
resetButton.y = 2500;
resetButton.visible = false;
game.addChild(resetButton);
var backButton = new UIButton('Back', function () {
gameState = 'characterSelect';
showCharacterSelect();
});
backButton.x = 300;
backButton.y = 2500;
backButton.visible = false;
game.addChild(backButton);
// Title for styling mode
var stylingTitle = new Text2('Hair Salon Studio', {
size: 60,
fill: 0x8B4513
});
stylingTitle.anchor.set(0.5, 0.5);
stylingTitle.x = 2048 / 2;
stylingTitle.y = 100;
stylingTitle.visible = false;
game.addChild(stylingTitle);
var selectedAccessory = null;
function startStyling(characterType) {
gameState = 'styling';
// Hide character selection
characterSelectTitle.visible = false;
for (var i = 0; i < characters.length; i++) {
characters[i].visible = false;
}
// Show styling interface
currentCharacter = new Character(characterType);
currentCharacter.x = 1024;
currentCharacter.y = 800;
game.addChild(currentCharacter);
toolsPanel.visible = true;
colorPanel.visible = true;
accessoriesPanel.visible = true;
resetButton.visible = true;
backButton.visible = true;
stylingTitle.visible = true;
}
function showCharacterSelect() {
// Hide styling interface
if (currentCharacter) {
currentCharacter.destroy();
currentCharacter = null;
}
toolsPanel.visible = false;
colorPanel.visible = false;
accessoriesPanel.visible = false;
resetButton.visible = false;
backButton.visible = false;
stylingTitle.visible = false;
// Show character selection
characterSelectTitle.visible = true;
for (var i = 0; i < characters.length; i++) {
characters[i].visible = true;
}
// Reset tool selection
selectedTool = null;
for (var i = 0; i < tools.length; i++) {
tools[i].deselect();
}
}
function selectTool(toolType) {
selectedTool = toolType;
for (var i = 0; i < tools.length; i++) {
if (tools[i].type === toolType) {
tools[i].select();
} else {
tools[i].deselect();
}
}
}
game.down = function (x, y, obj) {
if (gameState === 'styling' && currentCharacter && selectedTool === 'accessory' && selectedAccessory) {
var localPos = currentCharacter.toLocal(obj.position);
currentCharacter.addAccessory(selectedAccessory, localPos.x, localPos.y);
LK.getSound('click').play();
}
if (gameState === 'styling' && currentCharacter && selectedTool === 'scissors') {
LK.getSound('cut').play();
LK.effects.flashObject(currentCharacter.hair, 0xFFFFFF, 300);
}
};
game.update = function () {
// Game loop updates if needed
};