/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Character = Container.expand(function (name) {
var self = Container.call(this);
var characterBody = self.attachAsset('character', {
anchorX: 0.5,
anchorY: 0.5
});
self.name = name;
self.isTransformed = false;
self.hair = null;
self.leftTooth = null;
self.rightTooth = null;
self.leftArm = null;
self.rightArm = null;
self.transform = function () {
if (self.isTransformed) return;
self.isTransformed = true;
// Turn character purple
tween(characterBody, {
tint: 0x8A2BE2
}, {
duration: 500
});
// Add long purple hair
self.hair = self.addChild(LK.getAsset('hair', {
anchorX: 0.5,
anchorY: 1,
scaleX: 0,
scaleY: 0
}));
self.hair.x = 0;
self.hair.y = -125;
// Add long teeth
self.leftTooth = self.addChild(LK.getAsset('tooth', {
anchorX: 0.5,
anchorY: 0,
scaleX: 0,
scaleY: 0
}));
self.leftTooth.x = -30;
self.leftTooth.y = 50;
self.rightTooth = self.addChild(LK.getAsset('tooth', {
anchorX: 0.5,
anchorY: 0,
scaleX: 0,
scaleY: 0
}));
self.rightTooth.x = 30;
self.rightTooth.y = 50;
// Add extended arms
self.leftArm = self.addChild(LK.getAsset('arm', {
anchorX: 1,
anchorY: 0.5,
scaleX: 0,
scaleY: 0
}));
self.leftArm.x = -100;
self.leftArm.y = 0;
self.rightArm = self.addChild(LK.getAsset('arm', {
anchorX: 0,
anchorY: 0.5,
scaleX: 0,
scaleY: 0
}));
self.rightArm.x = 100;
self.rightArm.y = 0;
// Animate transformations
tween(self.hair, {
scaleX: 1,
scaleY: 1
}, {
duration: 800,
easing: tween.bounceOut
});
tween(self.leftTooth, {
scaleX: 1,
scaleY: 1
}, {
duration: 600,
easing: tween.elasticOut
});
tween(self.rightTooth, {
scaleX: 1,
scaleY: 1
}, {
duration: 600,
easing: tween.elasticOut
});
tween(self.leftArm, {
scaleX: 1,
scaleY: 1
}, {
duration: 1000,
easing: tween.easeOut
});
tween(self.rightArm, {
scaleX: 1,
scaleY: 1
}, {
duration: 1000,
easing: tween.easeOut
});
// Play transformation sound
LK.getSound('transform').play();
// Flash effect
LK.effects.flashObject(self, 0x8A2BE2, 800);
};
return self;
});
var PurplePotion = Container.expand(function () {
var self = Container.call(this);
var potionGraphics = self.attachAsset('potion', {
anchorX: 0.5,
anchorY: 0.5
});
self.originalX = 41;
self.originalY = 200;
self.isDragging = false;
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var potion = null;
var characters = [];
var dragTarget = null;
// Create purple potion at starting position
potion = game.addChild(new PurplePotion());
potion.x = 41;
potion.y = 200;
// Create four PBS Kids characters
var characterNames = ['Dash', 'Dot', 'Dee', 'Del'];
var characterPositions = [{
x: 400,
y: 400
}, {
x: 800,
y: 400
}, {
x: 1200,
y: 400
}, {
x: 1600,
y: 400
}];
for (var i = 0; i < characterNames.length; i++) {
var character = game.addChild(new Character(characterNames[i]));
character.x = characterPositions[i].x;
character.y = characterPositions[i].y;
characters.push(character);
}
// Add title text
var titleText = new Text2('Purple Villain Transformation Lab', {
size: 80,
fill: 0x4B0082
});
titleText.anchor.set(0.5, 0);
LK.gui.top.addChild(titleText);
titleText.y = 100;
// Add instruction text
var instructionText = new Text2('Drag the purple potion to transform characters!', {
size: 50,
fill: 0x000080
});
instructionText.anchor.set(0.5, 0);
LK.gui.top.addChild(instructionText);
instructionText.y = 200;
function handleMove(x, y, obj) {
if (dragTarget === potion) {
potion.x = x;
potion.y = y;
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
// Check if clicking on potion
if (potion.intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
dragTarget = potion;
potion.isDragging = true;
handleMove(x, y, obj);
}
};
game.up = function (x, y, obj) {
if (dragTarget === potion) {
// Check if potion intersects with any character
for (var i = 0; i < characters.length; i++) {
var character = characters[i];
if (potion.intersects(character)) {
character.transform();
break;
}
}
// Return potion to original position
tween(potion, {
x: potion.originalX,
y: potion.originalY
}, {
duration: 500,
easing: tween.easeOut
});
potion.isDragging = false;
dragTarget = null;
}
};
game.update = function () {
// Game runs at 60 FPS, update logic here if needed
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Character = Container.expand(function (name) {
var self = Container.call(this);
var characterBody = self.attachAsset('character', {
anchorX: 0.5,
anchorY: 0.5
});
self.name = name;
self.isTransformed = false;
self.hair = null;
self.leftTooth = null;
self.rightTooth = null;
self.leftArm = null;
self.rightArm = null;
self.transform = function () {
if (self.isTransformed) return;
self.isTransformed = true;
// Turn character purple
tween(characterBody, {
tint: 0x8A2BE2
}, {
duration: 500
});
// Add long purple hair
self.hair = self.addChild(LK.getAsset('hair', {
anchorX: 0.5,
anchorY: 1,
scaleX: 0,
scaleY: 0
}));
self.hair.x = 0;
self.hair.y = -125;
// Add long teeth
self.leftTooth = self.addChild(LK.getAsset('tooth', {
anchorX: 0.5,
anchorY: 0,
scaleX: 0,
scaleY: 0
}));
self.leftTooth.x = -30;
self.leftTooth.y = 50;
self.rightTooth = self.addChild(LK.getAsset('tooth', {
anchorX: 0.5,
anchorY: 0,
scaleX: 0,
scaleY: 0
}));
self.rightTooth.x = 30;
self.rightTooth.y = 50;
// Add extended arms
self.leftArm = self.addChild(LK.getAsset('arm', {
anchorX: 1,
anchorY: 0.5,
scaleX: 0,
scaleY: 0
}));
self.leftArm.x = -100;
self.leftArm.y = 0;
self.rightArm = self.addChild(LK.getAsset('arm', {
anchorX: 0,
anchorY: 0.5,
scaleX: 0,
scaleY: 0
}));
self.rightArm.x = 100;
self.rightArm.y = 0;
// Animate transformations
tween(self.hair, {
scaleX: 1,
scaleY: 1
}, {
duration: 800,
easing: tween.bounceOut
});
tween(self.leftTooth, {
scaleX: 1,
scaleY: 1
}, {
duration: 600,
easing: tween.elasticOut
});
tween(self.rightTooth, {
scaleX: 1,
scaleY: 1
}, {
duration: 600,
easing: tween.elasticOut
});
tween(self.leftArm, {
scaleX: 1,
scaleY: 1
}, {
duration: 1000,
easing: tween.easeOut
});
tween(self.rightArm, {
scaleX: 1,
scaleY: 1
}, {
duration: 1000,
easing: tween.easeOut
});
// Play transformation sound
LK.getSound('transform').play();
// Flash effect
LK.effects.flashObject(self, 0x8A2BE2, 800);
};
return self;
});
var PurplePotion = Container.expand(function () {
var self = Container.call(this);
var potionGraphics = self.attachAsset('potion', {
anchorX: 0.5,
anchorY: 0.5
});
self.originalX = 41;
self.originalY = 200;
self.isDragging = false;
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var potion = null;
var characters = [];
var dragTarget = null;
// Create purple potion at starting position
potion = game.addChild(new PurplePotion());
potion.x = 41;
potion.y = 200;
// Create four PBS Kids characters
var characterNames = ['Dash', 'Dot', 'Dee', 'Del'];
var characterPositions = [{
x: 400,
y: 400
}, {
x: 800,
y: 400
}, {
x: 1200,
y: 400
}, {
x: 1600,
y: 400
}];
for (var i = 0; i < characterNames.length; i++) {
var character = game.addChild(new Character(characterNames[i]));
character.x = characterPositions[i].x;
character.y = characterPositions[i].y;
characters.push(character);
}
// Add title text
var titleText = new Text2('Purple Villain Transformation Lab', {
size: 80,
fill: 0x4B0082
});
titleText.anchor.set(0.5, 0);
LK.gui.top.addChild(titleText);
titleText.y = 100;
// Add instruction text
var instructionText = new Text2('Drag the purple potion to transform characters!', {
size: 50,
fill: 0x000080
});
instructionText.anchor.set(0.5, 0);
LK.gui.top.addChild(instructionText);
instructionText.y = 200;
function handleMove(x, y, obj) {
if (dragTarget === potion) {
potion.x = x;
potion.y = y;
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
// Check if clicking on potion
if (potion.intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
dragTarget = potion;
potion.isDragging = true;
handleMove(x, y, obj);
}
};
game.up = function (x, y, obj) {
if (dragTarget === potion) {
// Check if potion intersects with any character
for (var i = 0; i < characters.length; i++) {
var character = characters[i];
if (potion.intersects(character)) {
character.transform();
break;
}
}
// Return potion to original position
tween(potion, {
x: potion.originalX,
y: potion.originalY
}, {
duration: 500,
easing: tween.easeOut
});
potion.isDragging = false;
dragTarget = null;
}
};
game.update = function () {
// Game runs at 60 FPS, update logic here if needed
};