/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { clickCounter: 0 }); /**** * Classes ****/ // Create a new class for the anvil object var Anvil = Container.expand(function () { var self = Container.call(this); // Attach 'anvil' asset to the 'Anvil' object var anvilGraphics = self.attachAsset('anvil', { anchorX: 0.5, anchorY: 0.5, alpha: 0.0 // Set transparency to 100% }); // Initialize the click counter self.clickCounter = storage.clickCounter || 0; // Load saved click counter or initialize to 0 counterText.setText('Forging skill: ' + self.clickCounter); // Update the text object with the loaded click counter // Make the 'Anvil' object interactive self.interactive = true; // Define the 'down' event handler self.down = function (x, y, obj) { storage.clickCounter = self.clickCounter; // Save the click counter to storage // Update the text object with the click counter and label self.clickCounter++; // Update the text object with the click counter and label counterText.setText('Forging skill: ' + self.clickCounter); // Change the color of the counter text based on the click counter if (self.clickCounter >= 100 && self.clickCounter < 500) { counterText.tint = 0x00FF00; // Green } else if (self.clickCounter >= 500 && self.clickCounter < 5000) { counterText.tint = 0x0000FF; // Blue } else if (self.clickCounter >= 5000 && self.clickCounter < 50000) { counterText.tint = 0x800080; // Purple } else if (self.clickCounter >= 50000 && self.clickCounter < 100000) { counterText.tint = 0xFFA500; // Orange } else if (self.clickCounter >= 100000) { counterText.tint = 0xFF0000; // Red } }; }); /**** * Initialize Game ****/ // Create a new text object to display the click counter var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ var growthRateText; var counterText = new Text2('Forging skill: 0', { size: 100, fill: 0xFFFFFF }); var background = game.addChild(new Container()); background.width = 2048; background.height = 2732; background.x = 2048 / 2; background.y = 2732 / 2; var backgroundGraphics = background.attachAsset('background', { anchorX: 0.5, anchorY: 0.5 }); var gameScreen; var newGame = game.addChild(new Container()); newGame.x = 2048 / 2; newGame.y = 2732 * 3 / 4 + 300; // Move the 'New Game' button 300 pixels below its original position // Attach 'newGameText' asset to the 'New Game' object var newGameText = newGame.attachAsset('newGameText', { anchorX: 0.5, anchorY: 0.5, stroke: 0xFFFFFF, // White color strokeThickness: 5 // 5px thickness }); // Make the 'New Game' object clickable newGame.interactive = true; newGame.down = function (x, y, obj) { hammer.destroy(); // Create a new game screen gameScreen = game.addChild(new Container()); gameScreen.x = 2048 / 2; gameScreen.y = 2732 / 2; // Attach 'gameScreenBackground' asset to the 'gameScreen' object var gameScreenBackground = gameScreen.attachAsset('gameScreenBackground', { anchorX: 0.5, anchorY: 0.5 }); // Hide the main menu newGame.visible = false; // Disable the background background.visible = false; // Create a new instance of the Anvil class var anvil = gameScreen.addChild(new Anvil()); // Position 'The anvil' a bit more to the left of the game screen anvil.x = -100; anvil.y = 2732 / 9; hammer = game.addChild(LK.getAsset('hammer', { anchorX: 0.5, anchorY: 0.5, scaleX: -1 })); // Create a new text object to display the click counter on the anvil screen counterText = new Text2('Forging skill: 0', { size: 100, fill: 0xFFFFFF }); counterText.anchor.set(0.5, 1); counterText.y = gameScreenBackground.y - gameScreenBackground.height / 2 - 50; // Position above the background gameScreen.addChild(counterText); // Add skill level labels with different colors var skillLevels = [{ text: 'Student', color: 0x00FF00 }, // Green { text: 'Apprentice', color: 0x0000FF }, // Blue { text: 'Master', color: 0x800080 }, // Purple { text: 'GrandMaster', color: 0xFFA500 }, // Orange { text: 'Legend', color: 0xFF0000 } // Red ]; var skillLevelsText = new Text2('', { size: 50, fill: 0xFFFFFF }); skillLevelsText.x = 0; skillLevelsText.y = gameScreenBackground.y + gameScreenBackground.height / 2 + 50; gameScreen.addChild(skillLevelsText); var xOffset = -gameScreenBackground.width / 2 + 20; skillLevels.forEach(function (level) { var levelText = new Text2(level.text, { size: 50, fill: level.color }); levelText.anchor.set(0, 0); levelText.x = skillLevelsText.x + xOffset; levelText.y = skillLevelsText.y; gameScreen.addChild(levelText); xOffset += levelText.width + 20; // Add space between labels }); }; // Initialize hammer asset var hammer; hammer = game.addChild(LK.getAsset('hammer', { anchorX: 0.5, anchorY: 0.5, scaleX: -1 })); // Play the 'NewSound' music track and loop it LK.playMusic('NewSound', { loop: true }); // Function to make the hammer follow the mouse/touch position function updateHammerPosition(x, y) { if (hammer) { hammer.x = x; hammer.y = y; } } // Make the cursor follow the mouse/touch position game.move = function (x, y, obj) { updateHammerPosition(x, y); }; // Animate cursor rotation on click game.down = function (x, y, obj) { LK.getSound('hammer').play(); tween(hammer, { rotation: -Math.PI / 2 }, { duration: 125, easing: tween.easeInOut, onFinish: function onFinish() { // Create stars around the hammer for 0.25 seconds for (var i = 0; i < 5; i++) { var star = game.addChild(LK.getAsset('star', { anchorX: 0.5, anchorY: 0.5 })); star.x = hammer.x - hammer.width / 2 + Math.random() * 100 - 25; star.y = hammer.y + hammer.height / 2 + Math.random() * 100 - 25; (function (star) { // Randomize the direction and speed of the star var angle = Math.random() * Math.PI * 2; // Random angle in radians var speed = Math.random() * 5 + 2; // Random speed between 2 and 7 // Make the star move in the randomized direction star.update = function () { star.x += Math.cos(angle) * speed; star.y += Math.sin(angle) * speed; }; LK.setTimeout(function () { star.destroy(); }, 250); })(star); } tween(hammer, { rotation: 0 }, { duration: 125, easing: tween.easeInOut }); } }); };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
clickCounter: 0
});
/****
* Classes
****/
// Create a new class for the anvil object
var Anvil = Container.expand(function () {
var self = Container.call(this);
// Attach 'anvil' asset to the 'Anvil' object
var anvilGraphics = self.attachAsset('anvil', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.0 // Set transparency to 100%
});
// Initialize the click counter
self.clickCounter = storage.clickCounter || 0; // Load saved click counter or initialize to 0
counterText.setText('Forging skill: ' + self.clickCounter); // Update the text object with the loaded click counter
// Make the 'Anvil' object interactive
self.interactive = true;
// Define the 'down' event handler
self.down = function (x, y, obj) {
storage.clickCounter = self.clickCounter; // Save the click counter to storage
// Update the text object with the click counter and label
self.clickCounter++;
// Update the text object with the click counter and label
counterText.setText('Forging skill: ' + self.clickCounter);
// Change the color of the counter text based on the click counter
if (self.clickCounter >= 100 && self.clickCounter < 500) {
counterText.tint = 0x00FF00; // Green
} else if (self.clickCounter >= 500 && self.clickCounter < 5000) {
counterText.tint = 0x0000FF; // Blue
} else if (self.clickCounter >= 5000 && self.clickCounter < 50000) {
counterText.tint = 0x800080; // Purple
} else if (self.clickCounter >= 50000 && self.clickCounter < 100000) {
counterText.tint = 0xFFA500; // Orange
} else if (self.clickCounter >= 100000) {
counterText.tint = 0xFF0000; // Red
}
};
});
/****
* Initialize Game
****/
// Create a new text object to display the click counter
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
var growthRateText;
var counterText = new Text2('Forging skill: 0', {
size: 100,
fill: 0xFFFFFF
});
var background = game.addChild(new Container());
background.width = 2048;
background.height = 2732;
background.x = 2048 / 2;
background.y = 2732 / 2;
var backgroundGraphics = background.attachAsset('background', {
anchorX: 0.5,
anchorY: 0.5
});
var gameScreen;
var newGame = game.addChild(new Container());
newGame.x = 2048 / 2;
newGame.y = 2732 * 3 / 4 + 300; // Move the 'New Game' button 300 pixels below its original position
// Attach 'newGameText' asset to the 'New Game' object
var newGameText = newGame.attachAsset('newGameText', {
anchorX: 0.5,
anchorY: 0.5,
stroke: 0xFFFFFF,
// White color
strokeThickness: 5 // 5px thickness
});
// Make the 'New Game' object clickable
newGame.interactive = true;
newGame.down = function (x, y, obj) {
hammer.destroy();
// Create a new game screen
gameScreen = game.addChild(new Container());
gameScreen.x = 2048 / 2;
gameScreen.y = 2732 / 2;
// Attach 'gameScreenBackground' asset to the 'gameScreen' object
var gameScreenBackground = gameScreen.attachAsset('gameScreenBackground', {
anchorX: 0.5,
anchorY: 0.5
});
// Hide the main menu
newGame.visible = false;
// Disable the background
background.visible = false;
// Create a new instance of the Anvil class
var anvil = gameScreen.addChild(new Anvil());
// Position 'The anvil' a bit more to the left of the game screen
anvil.x = -100;
anvil.y = 2732 / 9;
hammer = game.addChild(LK.getAsset('hammer', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: -1
}));
// Create a new text object to display the click counter on the anvil screen
counterText = new Text2('Forging skill: 0', {
size: 100,
fill: 0xFFFFFF
});
counterText.anchor.set(0.5, 1);
counterText.y = gameScreenBackground.y - gameScreenBackground.height / 2 - 50; // Position above the background
gameScreen.addChild(counterText);
// Add skill level labels with different colors
var skillLevels = [{
text: 'Student',
color: 0x00FF00
},
// Green
{
text: 'Apprentice',
color: 0x0000FF
},
// Blue
{
text: 'Master',
color: 0x800080
},
// Purple
{
text: 'GrandMaster',
color: 0xFFA500
},
// Orange
{
text: 'Legend',
color: 0xFF0000
} // Red
];
var skillLevelsText = new Text2('', {
size: 50,
fill: 0xFFFFFF
});
skillLevelsText.x = 0;
skillLevelsText.y = gameScreenBackground.y + gameScreenBackground.height / 2 + 50;
gameScreen.addChild(skillLevelsText);
var xOffset = -gameScreenBackground.width / 2 + 20;
skillLevels.forEach(function (level) {
var levelText = new Text2(level.text, {
size: 50,
fill: level.color
});
levelText.anchor.set(0, 0);
levelText.x = skillLevelsText.x + xOffset;
levelText.y = skillLevelsText.y;
gameScreen.addChild(levelText);
xOffset += levelText.width + 20; // Add space between labels
});
};
// Initialize hammer asset
var hammer;
hammer = game.addChild(LK.getAsset('hammer', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: -1
}));
// Play the 'NewSound' music track and loop it
LK.playMusic('NewSound', {
loop: true
});
// Function to make the hammer follow the mouse/touch position
function updateHammerPosition(x, y) {
if (hammer) {
hammer.x = x;
hammer.y = y;
}
}
// Make the cursor follow the mouse/touch position
game.move = function (x, y, obj) {
updateHammerPosition(x, y);
};
// Animate cursor rotation on click
game.down = function (x, y, obj) {
LK.getSound('hammer').play();
tween(hammer, {
rotation: -Math.PI / 2
}, {
duration: 125,
easing: tween.easeInOut,
onFinish: function onFinish() {
// Create stars around the hammer for 0.25 seconds
for (var i = 0; i < 5; i++) {
var star = game.addChild(LK.getAsset('star', {
anchorX: 0.5,
anchorY: 0.5
}));
star.x = hammer.x - hammer.width / 2 + Math.random() * 100 - 25;
star.y = hammer.y + hammer.height / 2 + Math.random() * 100 - 25;
(function (star) {
// Randomize the direction and speed of the star
var angle = Math.random() * Math.PI * 2; // Random angle in radians
var speed = Math.random() * 5 + 2; // Random speed between 2 and 7
// Make the star move in the randomized direction
star.update = function () {
star.x += Math.cos(angle) * speed;
star.y += Math.sin(angle) * speed;
};
LK.setTimeout(function () {
star.destroy();
}, 250);
})(star);
}
tween(hammer, {
rotation: 0
}, {
duration: 125,
easing: tween.easeInOut
});
}
});
};