/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
score: 0,
tapValue: 1,
upgradeLevel: 1,
upgradeCost: 10,
hasAutoClicker: false
});
/****
* Classes
****/
var AutoClickerButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphic = self.attachAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
tint: 0xff9500
});
self.text = new Text2('Auto Clicker: 1000', {
size: 60,
fill: 0xFFFFFF
});
self.text.anchor.set(0.5, 0.5);
self.addChild(self.text);
self.active = false;
self.timer = null;
self.clickInterval = 1000; // Default interval (1 second)
self.level = 1; // Auto clicker level
self.updateText = function (cost) {
if (self.active) {
if (self.level === 1) {
self.text.setText('Auto Clicker: Active');
} else {
self.text.setText('Auto Clicker Lvl ' + self.level + ': ' + (self.level < 6 ? getAutoClickerUpgradeCost() : 'MAX'));
}
} else {
self.text.setText('Auto Clicker: ' + cost);
}
};
self.down = function () {
tween(buttonGraphic, {
scaleX: 0.95,
scaleY: 0.95
}, {
duration: 100,
easing: tween.easeOut
});
};
self.up = function () {
tween(buttonGraphic, {
scaleX: 1,
scaleY: 1
}, {
duration: 100,
easing: tween.easeOut
});
if (self.active) {
attemptUpgradeAutoClicker();
} else {
attemptBuyAutoClicker();
}
};
self.disable = function () {
buttonGraphic.alpha = 0.5;
};
self.enable = function () {
buttonGraphic.alpha = 1;
};
self.restartTimer = function () {
// Clear existing timer if it exists
if (self.timer) {
LK.clearInterval(self.timer);
self.timer = null;
}
// Start auto clicking with new interval
self.timer = LK.setInterval(function () {
// Simulate a tap at a random position
var randomX = Math.random() * 2048;
var randomY = Math.random() * 2732;
// Add points
score += tapValue;
storage.score = score;
updateScoreDisplay();
// Create effects
var shockWave = new ShockWave();
game.addChild(shockWave);
shockWave.animate(randomX, randomY);
createTapEffect(randomX, randomY);
LK.getSound('tap').play();
}, self.clickInterval);
};
self.activate = function () {
self.active = true;
buttonGraphic.tint = 0x00c853;
self.updateText();
// Start auto clicking
if (!self.timer) {
self.restartTimer();
}
};
self.upgrade = function () {
self.level++;
// Update click interval based on level
switch (self.level) {
case 2:
self.clickInterval = 900; // 0.9 seconds
break;
case 3:
self.clickInterval = 800; // 0.8 seconds
break;
case 4:
self.clickInterval = 700; // 0.7 seconds
break;
case 5:
self.clickInterval = 500; // 0.5 seconds
break;
case 6:
self.clickInterval = 400; // 0.4 seconds
break;
}
// Update button text
self.updateText();
// Restart timer with new interval
self.restartTimer();
};
return self;
});
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphic = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
// Pulse animation when active
self.pulse = function () {
// Stop any existing animation
tween.stop(coinGraphic, {
scaleX: true,
scaleY: true
});
// Scale up
tween(coinGraphic, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
// Scale back down
tween(coinGraphic, {
scaleX: 1,
scaleY: 1
}, {
duration: 200,
easing: tween.elasticOut
});
}
});
};
return self;
});
var ShockWave = Container.expand(function () {
var self = Container.call(this);
// Create the shock wave circle
var waveGraphic = self.attachAsset('tapEffect', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.7
});
// Animation method for the shock wave
self.animate = function (x, y) {
// Set position
self.x = x;
self.y = y;
// Start with small scale and high opacity
waveGraphic.scaleX = 0.1;
waveGraphic.scaleY = 0.1;
waveGraphic.alpha = 0.8;
// First expand the wave quickly
tween(waveGraphic, {
scaleX: 3,
scaleY: 3,
alpha: 0.6
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
// Then continue expanding and fade out
tween(waveGraphic, {
scaleX: 8,
scaleY: 8,
alpha: 0
}, {
duration: 500,
easing: tween.easeOut,
onFinish: function onFinish() {
// Remove when done
if (self.parent) {
self.parent.removeChild(self);
}
}
});
}
});
};
return self;
});
var TapEffect = Container.expand(function () {
var self = Container.call(this);
var effectGraphic = self.attachAsset('tapEffect', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.7
});
self.animate = function (x, y, pointsEarned) {
self.x = x;
self.y = y;
self.alpha = 1;
effectGraphic.scaleX = 0.5;
effectGraphic.scaleY = 0.5;
// Create points text
var pointsText = new Text2("+" + pointsEarned, {
size: 60,
fill: 0xFFFFFF
});
pointsText.anchor.set(0.5, 0.5);
self.addChild(pointsText);
// Animate effect
tween(effectGraphic, {
scaleX: 1.5,
scaleY: 1.5,
alpha: 0
}, {
duration: 500,
easing: tween.easeOut
});
// Animate text floating up
tween(pointsText, {
y: -100,
alpha: 0
}, {
duration: 800,
easing: tween.easeOut,
onFinish: function onFinish() {
self.removeChild(pointsText);
pointsText = null;
}
});
};
return self;
});
var UpgradeButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphic = self.attachAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.text = new Text2('Upgrade: 10 points', {
size: 60,
fill: 0xFFFFFF
});
self.text.anchor.set(0.5, 0.5);
self.addChild(self.text);
self.updateText = function (cost) {
self.text.setText('Upgrade: ' + cost + ' points');
};
self.down = function () {
tween(buttonGraphic, {
scaleX: 0.95,
scaleY: 0.95
}, {
duration: 100,
easing: tween.easeOut
});
};
self.up = function () {
tween(buttonGraphic, {
scaleX: 1,
scaleY: 1
}, {
duration: 100,
easing: tween.easeOut
});
attemptUpgrade();
};
self.disable = function () {
buttonGraphic.alpha = 0.5;
};
self.enable = function () {
buttonGraphic.alpha = 1;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Game variables
var score = storage.score || 0;
var tapValue = storage.tapValue || 1;
var upgradeLevel = storage.upgradeLevel || 1;
var upgradeCost = storage.upgradeCost || 10;
var hasAutoClicker = storage.hasAutoClicker || false;
var autoClickerLevel = storage.autoClickerLevel || 1;
var autoClickerCost = 1000;
var effects = [];
// Function to get auto clicker upgrade cost based on level
function getAutoClickerUpgradeCost() {
switch (autoClickerLevel) {
case 1:
return 1000;
// First upgrade costs 1000
case 2:
return 2000;
// Second upgrade costs 2000
case 3:
return 5000;
// Third upgrade costs 5000
case 4:
return 10000;
// Fourth upgrade costs 10000
case 5:
return 50000;
// Fifth upgrade costs 50000
case 6:
return 125000;
// Sixth upgrade costs 125000
default:
return Infinity;
// No more upgrades
}
}
// Create upgrade button in top left (but not too close to the corner)
var upgradeButton = new UpgradeButton();
upgradeButton.x = 400;
upgradeButton.y = 150;
upgradeButton.updateText(upgradeCost);
game.addChild(upgradeButton);
// Create auto clicker button below the upgrade button
var autoClickerButton = new AutoClickerButton();
autoClickerButton.x = 400;
autoClickerButton.y = 320;
autoClickerButton.updateText(autoClickerCost);
game.addChild(autoClickerButton);
// If player already has auto clicker, activate it
if (hasAutoClicker) {
// Set the correct level and interval
autoClickerButton.level = autoClickerLevel;
// Set the correct interval based on level
switch (autoClickerLevel) {
case 2:
autoClickerButton.clickInterval = 900; // 0.9 seconds
break;
case 3:
autoClickerButton.clickInterval = 800; // 0.8 seconds
break;
case 4:
autoClickerButton.clickInterval = 700; // 0.7 seconds
break;
case 5:
autoClickerButton.clickInterval = 500; // 0.5 seconds
break;
case 6:
autoClickerButton.clickInterval = 400; // 0.4 seconds
break;
default:
autoClickerButton.clickInterval = 1000;
// 1 second (default)
}
autoClickerButton.activate();
}
// Function to check if auto clicker should be visible
function updateAutoClickerVisibility() {
if (score >= 1000 || hasAutoClicker) {
autoClickerButton.visible = true;
} else {
autoClickerButton.visible = false;
}
}
// Create score display
var scoreText = new Text2('Points: 0', {
size: 100,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
// Create tap value display
var tapValueText = new Text2('Points per tap: 1', {
size: 60,
fill: 0xFFFFFF
});
tapValueText.anchor.set(0.5, 0);
tapValueText.y = 120;
LK.gui.top.addChild(tapValueText);
// Format large numbers with K, M, B, T suffixes
function formatScore(num) {
if (num >= 1000000000000) {
// Trillion
var t = num / 1000000000000;
return (Math.floor(t * 10) / 10).toFixed(1).replace(/\.0$/, '') + 'T';
} else if (num >= 1000000000) {
// Billion
var b = num / 1000000000;
return (Math.floor(b * 10) / 10).toFixed(1).replace(/\.0$/, '') + 'B';
} else if (num >= 1000000) {
// Million
var m = num / 1000000;
return (Math.floor(m * 10) / 10).toFixed(1).replace(/\.0$/, '') + 'M';
} else if (num >= 1000) {
// Thousand
var k = num / 1000;
return (Math.floor(k * 10) / 10).toFixed(1).replace(/\.0$/, '') + 'K';
} else {
return num.toString();
}
}
// Update score display
function updateScoreDisplay() {
scoreText.setText('Points: ' + formatScore(score));
tapValueText.setText('Points per tap: ' + tapValue);
// Check if player can afford upgrade
if (score >= upgradeCost) {
upgradeButton.enable();
} else {
upgradeButton.disable();
}
// Check if auto clicker should be visible
updateAutoClickerVisibility();
// Enable/disable auto clicker button based on score
if (!hasAutoClicker) {
if (score >= autoClickerCost) {
autoClickerButton.enable();
} else {
autoClickerButton.disable();
}
} else if (autoClickerLevel < 6) {
// If has auto clicker but not max level, check if can afford upgrade
var nextUpgradeCost = getAutoClickerUpgradeCost();
if (score >= nextUpgradeCost) {
autoClickerButton.enable();
} else {
autoClickerButton.disable();
}
}
}
// Attempt to purchase an upgrade
function attemptUpgrade() {
if (score >= upgradeCost) {
// Deduct points
score -= upgradeCost;
// Increase tap value
upgradeLevel++;
tapValue = upgradeLevel;
// Calculate new upgrade cost (increase by 50%)
upgradeCost = Math.floor(upgradeCost * 1.5);
// Update button text
upgradeButton.updateText(upgradeCost);
// Save progress
storage.score = score;
storage.tapValue = tapValue;
storage.upgradeLevel = upgradeLevel;
storage.upgradeCost = upgradeCost;
// Update display
updateScoreDisplay();
// Play upgrade sound
LK.getSound('upgrade').play();
}
}
// Attempt to purchase auto clicker
function attemptBuyAutoClicker() {
if (!hasAutoClicker && score >= autoClickerCost) {
// Deduct points
score -= autoClickerCost;
// Activate auto clicker
hasAutoClicker = true;
storage.hasAutoClicker = true;
storage.autoClickerLevel = 1;
storage.score = score;
// Update display
updateScoreDisplay();
// Activate auto clicker functionality
autoClickerButton.activate();
// Play upgrade sound
LK.getSound('upgrade').play();
}
}
// Attempt to upgrade auto clicker
function attemptUpgradeAutoClicker() {
// Don't proceed if already at max level
if (autoClickerLevel >= 6) return;
// Get the cost for the current level upgrade
var upgradeCost = getAutoClickerUpgradeCost();
// Check if player can afford the upgrade
if (score >= upgradeCost) {
// Deduct points
score -= upgradeCost;
// Upgrade auto clicker
autoClickerLevel++;
// Save progress
storage.score = score;
storage.autoClickerLevel = autoClickerLevel;
// Update auto clicker
autoClickerButton.upgrade();
// Update display
updateScoreDisplay();
// Play upgrade sound
LK.getSound('upgrade').play();
}
}
// Create tap effect
function createTapEffect(x, y) {
var effect = new TapEffect();
game.addChild(effect);
effect.animate(x, y, tapValue);
// Remove effect after animation
LK.setTimeout(function () {
if (effect.parent) {
game.removeChild(effect);
}
}, 1000);
}
// Handle tapping on the game
game.down = function (x, y) {
// Add points
score += tapValue;
// Save progress
storage.score = score;
// Update display
updateScoreDisplay();
// Create shock wave effect
var shockWave = new ShockWave();
game.addChild(shockWave);
shockWave.animate(x, y);
// Create visual effect for points
createTapEffect(x, y);
// Play tap sound
LK.getSound('tap').play();
};
// Initial setup
updateScoreDisplay();
// Play background music
LK.playMusic('bgmusic', {
fade: {
start: 0,
end: 0.3,
duration: 1000
}
}); /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
score: 0,
tapValue: 1,
upgradeLevel: 1,
upgradeCost: 10,
hasAutoClicker: false
});
/****
* Classes
****/
var AutoClickerButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphic = self.attachAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
tint: 0xff9500
});
self.text = new Text2('Auto Clicker: 1000', {
size: 60,
fill: 0xFFFFFF
});
self.text.anchor.set(0.5, 0.5);
self.addChild(self.text);
self.active = false;
self.timer = null;
self.clickInterval = 1000; // Default interval (1 second)
self.level = 1; // Auto clicker level
self.updateText = function (cost) {
if (self.active) {
if (self.level === 1) {
self.text.setText('Auto Clicker: Active');
} else {
self.text.setText('Auto Clicker Lvl ' + self.level + ': ' + (self.level < 6 ? getAutoClickerUpgradeCost() : 'MAX'));
}
} else {
self.text.setText('Auto Clicker: ' + cost);
}
};
self.down = function () {
tween(buttonGraphic, {
scaleX: 0.95,
scaleY: 0.95
}, {
duration: 100,
easing: tween.easeOut
});
};
self.up = function () {
tween(buttonGraphic, {
scaleX: 1,
scaleY: 1
}, {
duration: 100,
easing: tween.easeOut
});
if (self.active) {
attemptUpgradeAutoClicker();
} else {
attemptBuyAutoClicker();
}
};
self.disable = function () {
buttonGraphic.alpha = 0.5;
};
self.enable = function () {
buttonGraphic.alpha = 1;
};
self.restartTimer = function () {
// Clear existing timer if it exists
if (self.timer) {
LK.clearInterval(self.timer);
self.timer = null;
}
// Start auto clicking with new interval
self.timer = LK.setInterval(function () {
// Simulate a tap at a random position
var randomX = Math.random() * 2048;
var randomY = Math.random() * 2732;
// Add points
score += tapValue;
storage.score = score;
updateScoreDisplay();
// Create effects
var shockWave = new ShockWave();
game.addChild(shockWave);
shockWave.animate(randomX, randomY);
createTapEffect(randomX, randomY);
LK.getSound('tap').play();
}, self.clickInterval);
};
self.activate = function () {
self.active = true;
buttonGraphic.tint = 0x00c853;
self.updateText();
// Start auto clicking
if (!self.timer) {
self.restartTimer();
}
};
self.upgrade = function () {
self.level++;
// Update click interval based on level
switch (self.level) {
case 2:
self.clickInterval = 900; // 0.9 seconds
break;
case 3:
self.clickInterval = 800; // 0.8 seconds
break;
case 4:
self.clickInterval = 700; // 0.7 seconds
break;
case 5:
self.clickInterval = 500; // 0.5 seconds
break;
case 6:
self.clickInterval = 400; // 0.4 seconds
break;
}
// Update button text
self.updateText();
// Restart timer with new interval
self.restartTimer();
};
return self;
});
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphic = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
// Pulse animation when active
self.pulse = function () {
// Stop any existing animation
tween.stop(coinGraphic, {
scaleX: true,
scaleY: true
});
// Scale up
tween(coinGraphic, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
// Scale back down
tween(coinGraphic, {
scaleX: 1,
scaleY: 1
}, {
duration: 200,
easing: tween.elasticOut
});
}
});
};
return self;
});
var ShockWave = Container.expand(function () {
var self = Container.call(this);
// Create the shock wave circle
var waveGraphic = self.attachAsset('tapEffect', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.7
});
// Animation method for the shock wave
self.animate = function (x, y) {
// Set position
self.x = x;
self.y = y;
// Start with small scale and high opacity
waveGraphic.scaleX = 0.1;
waveGraphic.scaleY = 0.1;
waveGraphic.alpha = 0.8;
// First expand the wave quickly
tween(waveGraphic, {
scaleX: 3,
scaleY: 3,
alpha: 0.6
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
// Then continue expanding and fade out
tween(waveGraphic, {
scaleX: 8,
scaleY: 8,
alpha: 0
}, {
duration: 500,
easing: tween.easeOut,
onFinish: function onFinish() {
// Remove when done
if (self.parent) {
self.parent.removeChild(self);
}
}
});
}
});
};
return self;
});
var TapEffect = Container.expand(function () {
var self = Container.call(this);
var effectGraphic = self.attachAsset('tapEffect', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.7
});
self.animate = function (x, y, pointsEarned) {
self.x = x;
self.y = y;
self.alpha = 1;
effectGraphic.scaleX = 0.5;
effectGraphic.scaleY = 0.5;
// Create points text
var pointsText = new Text2("+" + pointsEarned, {
size: 60,
fill: 0xFFFFFF
});
pointsText.anchor.set(0.5, 0.5);
self.addChild(pointsText);
// Animate effect
tween(effectGraphic, {
scaleX: 1.5,
scaleY: 1.5,
alpha: 0
}, {
duration: 500,
easing: tween.easeOut
});
// Animate text floating up
tween(pointsText, {
y: -100,
alpha: 0
}, {
duration: 800,
easing: tween.easeOut,
onFinish: function onFinish() {
self.removeChild(pointsText);
pointsText = null;
}
});
};
return self;
});
var UpgradeButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphic = self.attachAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.text = new Text2('Upgrade: 10 points', {
size: 60,
fill: 0xFFFFFF
});
self.text.anchor.set(0.5, 0.5);
self.addChild(self.text);
self.updateText = function (cost) {
self.text.setText('Upgrade: ' + cost + ' points');
};
self.down = function () {
tween(buttonGraphic, {
scaleX: 0.95,
scaleY: 0.95
}, {
duration: 100,
easing: tween.easeOut
});
};
self.up = function () {
tween(buttonGraphic, {
scaleX: 1,
scaleY: 1
}, {
duration: 100,
easing: tween.easeOut
});
attemptUpgrade();
};
self.disable = function () {
buttonGraphic.alpha = 0.5;
};
self.enable = function () {
buttonGraphic.alpha = 1;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Game variables
var score = storage.score || 0;
var tapValue = storage.tapValue || 1;
var upgradeLevel = storage.upgradeLevel || 1;
var upgradeCost = storage.upgradeCost || 10;
var hasAutoClicker = storage.hasAutoClicker || false;
var autoClickerLevel = storage.autoClickerLevel || 1;
var autoClickerCost = 1000;
var effects = [];
// Function to get auto clicker upgrade cost based on level
function getAutoClickerUpgradeCost() {
switch (autoClickerLevel) {
case 1:
return 1000;
// First upgrade costs 1000
case 2:
return 2000;
// Second upgrade costs 2000
case 3:
return 5000;
// Third upgrade costs 5000
case 4:
return 10000;
// Fourth upgrade costs 10000
case 5:
return 50000;
// Fifth upgrade costs 50000
case 6:
return 125000;
// Sixth upgrade costs 125000
default:
return Infinity;
// No more upgrades
}
}
// Create upgrade button in top left (but not too close to the corner)
var upgradeButton = new UpgradeButton();
upgradeButton.x = 400;
upgradeButton.y = 150;
upgradeButton.updateText(upgradeCost);
game.addChild(upgradeButton);
// Create auto clicker button below the upgrade button
var autoClickerButton = new AutoClickerButton();
autoClickerButton.x = 400;
autoClickerButton.y = 320;
autoClickerButton.updateText(autoClickerCost);
game.addChild(autoClickerButton);
// If player already has auto clicker, activate it
if (hasAutoClicker) {
// Set the correct level and interval
autoClickerButton.level = autoClickerLevel;
// Set the correct interval based on level
switch (autoClickerLevel) {
case 2:
autoClickerButton.clickInterval = 900; // 0.9 seconds
break;
case 3:
autoClickerButton.clickInterval = 800; // 0.8 seconds
break;
case 4:
autoClickerButton.clickInterval = 700; // 0.7 seconds
break;
case 5:
autoClickerButton.clickInterval = 500; // 0.5 seconds
break;
case 6:
autoClickerButton.clickInterval = 400; // 0.4 seconds
break;
default:
autoClickerButton.clickInterval = 1000;
// 1 second (default)
}
autoClickerButton.activate();
}
// Function to check if auto clicker should be visible
function updateAutoClickerVisibility() {
if (score >= 1000 || hasAutoClicker) {
autoClickerButton.visible = true;
} else {
autoClickerButton.visible = false;
}
}
// Create score display
var scoreText = new Text2('Points: 0', {
size: 100,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
// Create tap value display
var tapValueText = new Text2('Points per tap: 1', {
size: 60,
fill: 0xFFFFFF
});
tapValueText.anchor.set(0.5, 0);
tapValueText.y = 120;
LK.gui.top.addChild(tapValueText);
// Format large numbers with K, M, B, T suffixes
function formatScore(num) {
if (num >= 1000000000000) {
// Trillion
var t = num / 1000000000000;
return (Math.floor(t * 10) / 10).toFixed(1).replace(/\.0$/, '') + 'T';
} else if (num >= 1000000000) {
// Billion
var b = num / 1000000000;
return (Math.floor(b * 10) / 10).toFixed(1).replace(/\.0$/, '') + 'B';
} else if (num >= 1000000) {
// Million
var m = num / 1000000;
return (Math.floor(m * 10) / 10).toFixed(1).replace(/\.0$/, '') + 'M';
} else if (num >= 1000) {
// Thousand
var k = num / 1000;
return (Math.floor(k * 10) / 10).toFixed(1).replace(/\.0$/, '') + 'K';
} else {
return num.toString();
}
}
// Update score display
function updateScoreDisplay() {
scoreText.setText('Points: ' + formatScore(score));
tapValueText.setText('Points per tap: ' + tapValue);
// Check if player can afford upgrade
if (score >= upgradeCost) {
upgradeButton.enable();
} else {
upgradeButton.disable();
}
// Check if auto clicker should be visible
updateAutoClickerVisibility();
// Enable/disable auto clicker button based on score
if (!hasAutoClicker) {
if (score >= autoClickerCost) {
autoClickerButton.enable();
} else {
autoClickerButton.disable();
}
} else if (autoClickerLevel < 6) {
// If has auto clicker but not max level, check if can afford upgrade
var nextUpgradeCost = getAutoClickerUpgradeCost();
if (score >= nextUpgradeCost) {
autoClickerButton.enable();
} else {
autoClickerButton.disable();
}
}
}
// Attempt to purchase an upgrade
function attemptUpgrade() {
if (score >= upgradeCost) {
// Deduct points
score -= upgradeCost;
// Increase tap value
upgradeLevel++;
tapValue = upgradeLevel;
// Calculate new upgrade cost (increase by 50%)
upgradeCost = Math.floor(upgradeCost * 1.5);
// Update button text
upgradeButton.updateText(upgradeCost);
// Save progress
storage.score = score;
storage.tapValue = tapValue;
storage.upgradeLevel = upgradeLevel;
storage.upgradeCost = upgradeCost;
// Update display
updateScoreDisplay();
// Play upgrade sound
LK.getSound('upgrade').play();
}
}
// Attempt to purchase auto clicker
function attemptBuyAutoClicker() {
if (!hasAutoClicker && score >= autoClickerCost) {
// Deduct points
score -= autoClickerCost;
// Activate auto clicker
hasAutoClicker = true;
storage.hasAutoClicker = true;
storage.autoClickerLevel = 1;
storage.score = score;
// Update display
updateScoreDisplay();
// Activate auto clicker functionality
autoClickerButton.activate();
// Play upgrade sound
LK.getSound('upgrade').play();
}
}
// Attempt to upgrade auto clicker
function attemptUpgradeAutoClicker() {
// Don't proceed if already at max level
if (autoClickerLevel >= 6) return;
// Get the cost for the current level upgrade
var upgradeCost = getAutoClickerUpgradeCost();
// Check if player can afford the upgrade
if (score >= upgradeCost) {
// Deduct points
score -= upgradeCost;
// Upgrade auto clicker
autoClickerLevel++;
// Save progress
storage.score = score;
storage.autoClickerLevel = autoClickerLevel;
// Update auto clicker
autoClickerButton.upgrade();
// Update display
updateScoreDisplay();
// Play upgrade sound
LK.getSound('upgrade').play();
}
}
// Create tap effect
function createTapEffect(x, y) {
var effect = new TapEffect();
game.addChild(effect);
effect.animate(x, y, tapValue);
// Remove effect after animation
LK.setTimeout(function () {
if (effect.parent) {
game.removeChild(effect);
}
}, 1000);
}
// Handle tapping on the game
game.down = function (x, y) {
// Add points
score += tapValue;
// Save progress
storage.score = score;
// Update display
updateScoreDisplay();
// Create shock wave effect
var shockWave = new ShockWave();
game.addChild(shockWave);
shockWave.animate(x, y);
// Create visual effect for points
createTapEffect(x, y);
// Play tap sound
LK.getSound('tap').play();
};
// Initial setup
updateScoreDisplay();
// Play background music
LK.playMusic('bgmusic', {
fade: {
start: 0,
end: 0.3,
duration: 1000
}
});