User prompt
Fix Bug: 'ReferenceError: scoreTxt is not defined' in this line: 'scoreTxt.setText(LK.getScore().toString());' Line Number: 298
User prompt
Fix Bug: 'ReferenceError: scoreTxt is not defined' in this line: 'scoreTxt.setText(LK.getScore().toString());' Line Number: 298
User prompt
Fix Bug: 'ReferenceError: scoreTxt is not defined' in this line: 'scoreTxt.setText(LK.getScore().toString());' Line Number: 298
User prompt
Fix Bug: 'ReferenceError: scoreTxt is not defined' in this line: 'scoreTxt.setText(LK.getScore().toString());' Line Number: 298
User prompt
Fix Bug: 'Uncaught TypeError: this.initScoreText is not a function' in this line: 'this.initScoreText();' Line Number: 276
User prompt
Fix Bug: 'Uncaught ReferenceError: scoreTxt is not defined' in this line: 'cloudTabButton.y = scoreTxt.y + scoreTxt.height + 50;' Line Number: 251
User prompt
Fix Bug: 'Uncaught ReferenceError: scoreTxt is not defined' in this line: 'cloudTabButton.y = scoreTxt.y + scoreTxt.height + 50;' Line Number: 240
User prompt
Fix the problem with scoreTxt not being accessible in line 53
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'y')' in this line: 'cloudTabButton.y = scoreTxt.y + scoreTxt.height + 50;' Line Number: 243
User prompt
Let's make scoreTxt globally accessible
Code edit (1 edits merged)
Please save this source code
User prompt
Can we make scoreTxt globally accessible?
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'y')' in this line: 'cloudTabButton.y = scoreTxt.y + scoreTxt.height + 50;' Line Number: 229
User prompt
Fix Bug: 'Timeout.tick error: scoreTxt is not defined' in this line: 'scoreTxt.setText(LK.getScore().toString());' Line Number: 53
User prompt
Let's set two flags for upgrade buttons: available and purchased. Available should be defaulted to false unless set to true in the constructor. Purchased should be set to false when spawned.
User prompt
Fix Bug: 'Timeout.tick error: scoreTxt is not defined' in this line: 'scoreTxt.setText(LK.getScore().toString());' Line Number: 48
User prompt
Fix Bug: 'Timeout.tick error: scoreTxt is not defined' in this line: 'scoreTxt.setText(LK.getScore().toString());' Line Number: 48
User prompt
Fix Bug: 'Timeout.tick error: scoreTxt is not defined' in this line: 'scoreTxt.setText(LK.getScore().toString());' Line Number: 48
User prompt
Fix Bug: 'Timeout.tick error: scoreTxt is not defined' in this line: 'scoreTxt.setText(LK.getScore().toString());' Line Number: 48
Code edit (1 edits merged)
Please save this source code
User prompt
Fix Bug: 'Timeout.tick error: scoreTxt is not defined' in this line: 'scoreTxt.setText(LK.getScore().toString());' Line Number: 58
User prompt
Fix Bug: 'Timeout.tick error: scoreTxt is not defined' in this line: 'scoreTxt.setText(LK.getScore().toString());' Line Number: 58
User prompt
Fix Bug: 'Timeout.tick error: scoreTxt is not defined' in this line: 'scoreTxt.setText(LK.getScore().toString());' Line Number: 58
User prompt
Fix Bug: 'Timeout.tick error: Cannot read properties of undefined (reading 'scorePerSec')' in this line: 'LK.setScore(Math.round(LK.getScore() + self.parent.scorePerSec));' Line Number: 55
User prompt
Buying the first upgrade does not properly increase the score per second
var Upgrade = Container.expand(function (cost, effectType, effectMode, effectValue) { var self = Container.call(this); var upgradeGraphics = self.createAsset('upgrade', 'Upgrade Graphics', .5, .5); var costText = new Text2('Cost: ' + (cost < 10000 ? Math.round(cost) : cost.toPrecision(2)), { size: 35, fill: '#ffffff', anchor: { x: 0.5, y: 0.5 } }); costText.y = -35; costText.x = -costText.width / 2; self.addChild(costText); var effectDescription = effectType === 'click' ? 'Per Click: ' : 'Per Second: '; effectDescription += effectMode === 'add' ? '+' : 'x'; effectDescription += effectValue !== undefined ? effectValue.toString() : '0'; var effectText = new Text2(effectDescription, { size: 35, fill: '#ffffff', anchor: { x: 0.5, y: 0.5 } }); effectText.y = 35; effectText.x = -effectText.width / 2; self.addChild(effectText); self.cost = cost; self.effectType = effectType; self.effectMode = effectMode; self.effectValue = effectValue; self.purchased = false; self.on('down', function () { if (!self.purchased && LK.getScore() >= self.cost) { LK.setScore(LK.getScore() - self.cost); if (self.effectType === 'click') { if (self.effectMode === 'add') { cloud.clickValue += self.effectValue; } else { cloud.clickValue *= self.effectValue; } } else { if (self.effectMode === 'add') { if (self.parent) { self.parent.scorePerSec += self.effectValue; } } else { if (self.parent) { self.parent.scorePerSec *= self.effectValue; } } } LK.setInterval(function () { LK.setScore(Math.round(LK.getScore() + self.parent.scorePerSec)); scoreTxt.setText(LK.getScore().toString()); }, 1000); self.purchased = true; self.removeChild(self); if (self.parent) { self.parent.children.forEach(function (upgrade, index) { if (upgrade.purchased) { self.parent.removeChild(upgrade); } else { upgrade.y -= 150; } }); } } }); }); var TabButton = Container.expand(function (label, onClick) { var self = Container.call(this); var buttonGraphics = self.createAsset('tabButton', 'Tab Button Graphics', 0, 0.5); buttonGraphics.tint = 0x777777; var buttonText = new Text2(label, { size: 50, fill: '#ffffff', anchor: { x: 0.5, y: 0.5 }, align: 'center' }); self.addChild(buttonText); self.on('down', function () { onClick(); }); }); var TabSystem = Container.expand(function () { var self = Container.call(this); self.tabs = {}; self.currentTab = ''; self.addTab = function (name, content) { self.tabs[name] = content; content.visible = false; self.addChild(content); }; self.switchTab = function (name) { if (self.tabs[self.currentTab]) { self.tabs[self.currentTab].visible = false; self.tabs[self.currentTab].children.forEach(function (child) { child.visible = false; }); } self.currentTab = name; self.tabs[name].visible = true; self.tabs[name].children.forEach(function (child) { child.visible = true; if (child instanceof TabButton) { child.children[0].tint = 0xFFFFFF; } }); Object.values(self.tabs).forEach(function (content) { if (content !== self.tabs[name]) { content.children.forEach(function (child) { if (child instanceof TabButton) { child.children[0].tint = 0x777777; } }); } }); }; }); var Snowflake = Container.expand(function () { var self = Container.call(this); var snowflakeGraphics = self.createAsset('snowflake', 'Snowflake Graphics', .5, .5); self.rotationSpeed = (Math.random() - 0.5) * 0.02; self.swayMagnitude = Math.random() * 10; self.swaySpeed = (Math.random() - 0.5) * 0.03; self.sizeFactor = Math.random() * 0.75 + 0.25; self.scale.set(self.sizeFactor); self.swayMagnitude = self.sizeFactor * 5; self.swayOffset = Math.random() * Math.PI * 2; self.update = function () { self.y += 1 + Math.random() * 2; self.rotation += self.rotationSpeed; self.x += Math.sin(LK.ticks * self.swaySpeed * 2 + self.swayOffset) * (self.swayMagnitude * 0.25); }; self.collect = function () { LK.setScore(Math.round(LK.getScore() + 1)); scoreTxt.setText(LK.getScore().toString()); self.destroy(); }; }); var Cloud = Container.expand(function () { var self = Container.call(this); self.visible = true; var cloudGraphics = self.createAsset('cloud', 'Cloud Graphics', .5, .5); cloudGraphics.alpha = 1; self.spawnRate = 1; self.clickValue = 1; self.spawnSnowflake = function () { var snowflake = new Snowflake(); var cloudWidth = cloudGraphics.width; snowflake.x = self.x - cloudWidth / 2 + Math.random() * cloudWidth; snowflake.y = self.y + cloudGraphics.height / 2; snowflake.rotation = Math.random() * Math.PI * 2; return snowflake; }; }); var Game = Container.expand(function () { var self = Container.call(this); self.scorePerSec = 0; LK.stageContainer.setBackgroundColor(0x000000); var tabSystem = new TabSystem(); var upgradesTab = new Container(); var upgradesConfig = [{ cost: 10, effectType: 'perSecond', effectMode: 'add', effectValue: 1 }, { cost: 25, effectType: 'perSecond', effectMode: 'multiply', effectValue: 2 }, { cost: 100, effectType: 'perSecond', effectMode: 'multiply', effectValue: 2 }, { cost: 500, effectType: 'perSecond', effectMode: 'multiply', effectValue: 2 }, { cost: 1000, effectType: 'perSecond', effectMode: 'multiply', effectValue: 2 }, { cost: 2500, effectType: 'perSecond', effectMode: 'multiply', effectValue: 2 }, { cost: 10000, effectType: 'perSecond', effectMode: 'multiply', effectValue: 2 }, { cost: 20000, effectType: 'perSecond', effectMode: 'multiply', effectValue: 2 }]; var columns = 3; var upgradeWidth = 400; var upgradeHeight = 200; var upgradeSpacing = 200; var upgradePadding = 200; var startX = 0 - upgradeWidth / 2; var startY = 800; upgradesConfig.forEach(function (config, index) { var upgrade = upgradesTab.addChild(new Upgrade(config.cost, config.effectType, config.effectMode, config.effectValue)); var column = index % columns + 1; var row = Math.floor(index / columns); upgrade.x = startX + column * (upgradeWidth + upgradeSpacing); upgrade.y = startY + row * (upgradeHeight + upgradePadding); }); var scoreTxt = new Text2('', { size: 150, fill: '#ffffff', anchor: { x: 0.5, y: 0.5 } }); scoreTxt.x = -scoreTxt.width / 2; LK.gui.topCenter.addChild(scoreTxt); scoreTxt.y = LK.gui.topCenter.height / 2; var cloudTabButton = new TabButton('Cloud', function () { tabSystem.switchTab('Cloud'); }); var upgradesTabButton = new TabButton('Upgrades', function () { tabSystem.switchTab('Upgrades'); }); cloudTabButton.x = -cloudTabButton.width; cloudTabButton.y = scoreTxt.y + scoreTxt.height + 50; upgradesTabButton.x = 10; upgradesTabButton.y = cloudTabButton.y; LK.gui.topCenter.addChild(cloudTabButton); LK.gui.topCenter.addChild(upgradesTabButton); self.addChild(tabSystem); var snowflakes = []; var cloudTab = new Container(); var cloud = cloudTab.addChild(new Cloud()); cloud.x = 2048 / 2; cloud.y = 2732 / 2; tabSystem.addTab('Upgrades', upgradesTab); tabSystem.addTab('Cloud', cloudTab); tabSystem.switchTab('Cloud'); var scoreTxt = new Text2('0', { size: 150, fill: '#ffffff', anchor: { x: 0.5, y: 0 } }); LK.gui.topCenter.addChild(scoreTxt); scoreTxt.y = 100; cloud.on('down', function (obj) { for (var i = 0; i < cloud.spawnRate; i++) { var snowflake = cloud.spawnSnowflake(); snowflakes.push(snowflake); self.addChild(snowflake); } LK.setScore(Math.round(LK.getScore() + cloud.clickValue)); scoreTxt.setText(Math.round(LK.getScore()).toString()); }); var tickCount = 0; LK.setInterval(function () { LK.setScore(Math.round(LK.getScore() + self.scorePerSec)); scoreTxt.setText(LK.getScore().toString()); console.log('Score: ' + LK.getScore()); console.log('Score per second: ' + self.scorePerSec); console.log('Cloud spawn rate: ' + cloud.spawnRate); console.log('Cloud click value: ' + cloud.clickValue); }, 1000); LK.on('tick', function () { for (var i = snowflakes.length - 1; i >= 0; i--) { snowflakes[i].update(); if (snowflakes[i].y > 2732 + snowflakes[i].height) { snowflakes[i].destroy(); snowflakes.splice(i, 1); } } scoreTxt.setText(LK.getScore().toString()); }); });
var Upgrade = Container.expand(function (cost, effectType, effectMode, effectValue) {
var self = Container.call(this);
var upgradeGraphics = self.createAsset('upgrade', 'Upgrade Graphics', .5, .5);
var costText = new Text2('Cost: ' + (cost < 10000 ? Math.round(cost) : cost.toPrecision(2)), {
size: 35,
fill: '#ffffff',
anchor: {
x: 0.5,
y: 0.5
}
});
costText.y = -35;
costText.x = -costText.width / 2;
self.addChild(costText);
var effectDescription = effectType === 'click' ? 'Per Click: ' : 'Per Second: ';
effectDescription += effectMode === 'add' ? '+' : 'x';
effectDescription += effectValue !== undefined ? effectValue.toString() : '0';
var effectText = new Text2(effectDescription, {
size: 35,
fill: '#ffffff',
anchor: {
x: 0.5,
y: 0.5
}
});
effectText.y = 35;
effectText.x = -effectText.width / 2;
self.addChild(effectText);
self.cost = cost;
self.effectType = effectType;
self.effectMode = effectMode;
self.effectValue = effectValue;
self.purchased = false;
self.on('down', function () {
if (!self.purchased && LK.getScore() >= self.cost) {
LK.setScore(LK.getScore() - self.cost);
if (self.effectType === 'click') {
if (self.effectMode === 'add') {
cloud.clickValue += self.effectValue;
} else {
cloud.clickValue *= self.effectValue;
}
} else {
if (self.effectMode === 'add') {
if (self.parent) {
self.parent.scorePerSec += self.effectValue;
}
} else {
if (self.parent) {
self.parent.scorePerSec *= self.effectValue;
}
}
}
LK.setInterval(function () {
LK.setScore(Math.round(LK.getScore() + self.parent.scorePerSec));
scoreTxt.setText(LK.getScore().toString());
}, 1000);
self.purchased = true;
self.removeChild(self);
if (self.parent) {
self.parent.children.forEach(function (upgrade, index) {
if (upgrade.purchased) {
self.parent.removeChild(upgrade);
} else {
upgrade.y -= 150;
}
});
}
}
});
});
var TabButton = Container.expand(function (label, onClick) {
var self = Container.call(this);
var buttonGraphics = self.createAsset('tabButton', 'Tab Button Graphics', 0, 0.5);
buttonGraphics.tint = 0x777777;
var buttonText = new Text2(label, {
size: 50,
fill: '#ffffff',
anchor: {
x: 0.5,
y: 0.5
},
align: 'center'
});
self.addChild(buttonText);
self.on('down', function () {
onClick();
});
});
var TabSystem = Container.expand(function () {
var self = Container.call(this);
self.tabs = {};
self.currentTab = '';
self.addTab = function (name, content) {
self.tabs[name] = content;
content.visible = false;
self.addChild(content);
};
self.switchTab = function (name) {
if (self.tabs[self.currentTab]) {
self.tabs[self.currentTab].visible = false;
self.tabs[self.currentTab].children.forEach(function (child) {
child.visible = false;
});
}
self.currentTab = name;
self.tabs[name].visible = true;
self.tabs[name].children.forEach(function (child) {
child.visible = true;
if (child instanceof TabButton) {
child.children[0].tint = 0xFFFFFF;
}
});
Object.values(self.tabs).forEach(function (content) {
if (content !== self.tabs[name]) {
content.children.forEach(function (child) {
if (child instanceof TabButton) {
child.children[0].tint = 0x777777;
}
});
}
});
};
});
var Snowflake = Container.expand(function () {
var self = Container.call(this);
var snowflakeGraphics = self.createAsset('snowflake', 'Snowflake Graphics', .5, .5);
self.rotationSpeed = (Math.random() - 0.5) * 0.02;
self.swayMagnitude = Math.random() * 10;
self.swaySpeed = (Math.random() - 0.5) * 0.03;
self.sizeFactor = Math.random() * 0.75 + 0.25;
self.scale.set(self.sizeFactor);
self.swayMagnitude = self.sizeFactor * 5;
self.swayOffset = Math.random() * Math.PI * 2;
self.update = function () {
self.y += 1 + Math.random() * 2;
self.rotation += self.rotationSpeed;
self.x += Math.sin(LK.ticks * self.swaySpeed * 2 + self.swayOffset) * (self.swayMagnitude * 0.25);
};
self.collect = function () {
LK.setScore(Math.round(LK.getScore() + 1));
scoreTxt.setText(LK.getScore().toString());
self.destroy();
};
});
var Cloud = Container.expand(function () {
var self = Container.call(this);
self.visible = true;
var cloudGraphics = self.createAsset('cloud', 'Cloud Graphics', .5, .5);
cloudGraphics.alpha = 1;
self.spawnRate = 1;
self.clickValue = 1;
self.spawnSnowflake = function () {
var snowflake = new Snowflake();
var cloudWidth = cloudGraphics.width;
snowflake.x = self.x - cloudWidth / 2 + Math.random() * cloudWidth;
snowflake.y = self.y + cloudGraphics.height / 2;
snowflake.rotation = Math.random() * Math.PI * 2;
return snowflake;
};
});
var Game = Container.expand(function () {
var self = Container.call(this);
self.scorePerSec = 0;
LK.stageContainer.setBackgroundColor(0x000000);
var tabSystem = new TabSystem();
var upgradesTab = new Container();
var upgradesConfig = [{
cost: 10,
effectType: 'perSecond',
effectMode: 'add',
effectValue: 1
}, {
cost: 25,
effectType: 'perSecond',
effectMode: 'multiply',
effectValue: 2
}, {
cost: 100,
effectType: 'perSecond',
effectMode: 'multiply',
effectValue: 2
}, {
cost: 500,
effectType: 'perSecond',
effectMode: 'multiply',
effectValue: 2
}, {
cost: 1000,
effectType: 'perSecond',
effectMode: 'multiply',
effectValue: 2
}, {
cost: 2500,
effectType: 'perSecond',
effectMode: 'multiply',
effectValue: 2
}, {
cost: 10000,
effectType: 'perSecond',
effectMode: 'multiply',
effectValue: 2
}, {
cost: 20000,
effectType: 'perSecond',
effectMode: 'multiply',
effectValue: 2
}];
var columns = 3;
var upgradeWidth = 400;
var upgradeHeight = 200;
var upgradeSpacing = 200;
var upgradePadding = 200;
var startX = 0 - upgradeWidth / 2;
var startY = 800;
upgradesConfig.forEach(function (config, index) {
var upgrade = upgradesTab.addChild(new Upgrade(config.cost, config.effectType, config.effectMode, config.effectValue));
var column = index % columns + 1;
var row = Math.floor(index / columns);
upgrade.x = startX + column * (upgradeWidth + upgradeSpacing);
upgrade.y = startY + row * (upgradeHeight + upgradePadding);
});
var scoreTxt = new Text2('', {
size: 150,
fill: '#ffffff',
anchor: {
x: 0.5,
y: 0.5
}
});
scoreTxt.x = -scoreTxt.width / 2;
LK.gui.topCenter.addChild(scoreTxt);
scoreTxt.y = LK.gui.topCenter.height / 2;
var cloudTabButton = new TabButton('Cloud', function () {
tabSystem.switchTab('Cloud');
});
var upgradesTabButton = new TabButton('Upgrades', function () {
tabSystem.switchTab('Upgrades');
});
cloudTabButton.x = -cloudTabButton.width;
cloudTabButton.y = scoreTxt.y + scoreTxt.height + 50;
upgradesTabButton.x = 10;
upgradesTabButton.y = cloudTabButton.y;
LK.gui.topCenter.addChild(cloudTabButton);
LK.gui.topCenter.addChild(upgradesTabButton);
self.addChild(tabSystem);
var snowflakes = [];
var cloudTab = new Container();
var cloud = cloudTab.addChild(new Cloud());
cloud.x = 2048 / 2;
cloud.y = 2732 / 2;
tabSystem.addTab('Upgrades', upgradesTab);
tabSystem.addTab('Cloud', cloudTab);
tabSystem.switchTab('Cloud');
var scoreTxt = new Text2('0', {
size: 150,
fill: '#ffffff',
anchor: {
x: 0.5,
y: 0
}
});
LK.gui.topCenter.addChild(scoreTxt);
scoreTxt.y = 100;
cloud.on('down', function (obj) {
for (var i = 0; i < cloud.spawnRate; i++) {
var snowflake = cloud.spawnSnowflake();
snowflakes.push(snowflake);
self.addChild(snowflake);
}
LK.setScore(Math.round(LK.getScore() + cloud.clickValue));
scoreTxt.setText(Math.round(LK.getScore()).toString());
});
var tickCount = 0;
LK.setInterval(function () {
LK.setScore(Math.round(LK.getScore() + self.scorePerSec));
scoreTxt.setText(LK.getScore().toString());
console.log('Score: ' + LK.getScore());
console.log('Score per second: ' + self.scorePerSec);
console.log('Cloud spawn rate: ' + cloud.spawnRate);
console.log('Cloud click value: ' + cloud.clickValue);
}, 1000);
LK.on('tick', function () {
for (var i = snowflakes.length - 1; i >= 0; i--) {
snowflakes[i].update();
if (snowflakes[i].y > 2732 + snowflakes[i].height) {
snowflakes[i].destroy();
snowflakes.splice(i, 1);
}
}
scoreTxt.setText(LK.getScore().toString());
});
});