/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { money: 0, lastSaveTime: "undefined", businesses: [{ id: "lemonade_stand", name: "Lemonade Stand", level: 1, basePrice: 4, baseIncome: 1, owned: 1, manager: false, managerPrice: 1000, upgradeLevel: 1, upgradePrice: 50, lastCollectTime: 0 }, { id: "restaurant", name: "Restaurant", level: 1, basePrice: 60, baseIncome: 20, owned: 0, manager: false, managerPrice: 15000, upgradeLevel: 1, upgradePrice: 500, lastCollectTime: 0 }, { id: "tech_startup", name: "Tech Startup", level: 1, basePrice: 720, baseIncome: 90, owned: 0, manager: false, managerPrice: 100000, upgradeLevel: 1, upgradePrice: 4000, lastCollectTime: 0 }, { id: "real_estate", name: "Real Estate", level: 1, basePrice: 8640, baseIncome: 360, owned: 0, manager: false, managerPrice: 1200000, upgradeLevel: 1, upgradePrice: 20000, lastCollectTime: 0 }] }); /**** * Classes ****/ var Business = Container.expand(function (data) { var self = Container.call(this); self.data = data; var businessGraphics = self.attachAsset(data.id, { anchorX: 0.5, anchorY: 0.5 }); self.progress = 0; self.collectionTime = 3000; // 3 seconds for collection cycle // Business info display self.infoText = new Text2('', { size: 40, fill: 0xFFFFFF }); self.infoText.anchor.set(0.5, 0); self.infoText.y = 100; self.addChild(self.infoText); // Progress bar background self.progressBg = self.attachAsset('upgrade_btn', { anchorX: 0.5, anchorY: 0.5, width: 200, height: 20, y: -100, tint: 0x555555 }); // Progress bar fill self.progressFill = self.attachAsset('upgrade_btn', { anchorX: 0, anchorY: 0.5, width: 0, height: 16, x: -98, y: -100, tint: 0x00FF00 }); // Buy button self.buyBtn = self.attachAsset('upgrade_btn', { anchorX: 0.5, anchorY: 0.5, y: 150 }); self.buyText = new Text2('Buy', { size: 36, fill: 0xFFFFFF }); self.buyText.anchor.set(0.5, 0.5); self.buyBtn.addChild(self.buyText); // Interaction handlers self.buyBtn.interactive = true; self.buyBtn.down = function () { self.buyBusiness(); }; businessGraphics.interactive = true; businessGraphics.down = function () { self.collectIncome(); }; self.updateUI = function () { if (self.data.owned > 0) { var income = self.calculateIncome(); self.infoText.setText(self.data.name + "\nLvl " + self.data.level + "\nIncome: $" + formatMoney(income)); } else { self.infoText.setText(self.data.name + "\nCosts: $" + formatMoney(self.calculatePrice())); } self.buyText.setText(self.data.owned > 0 ? "Upgrade ($" + formatMoney(self.data.upgradePrice) + ")" : "Buy ($" + formatMoney(self.calculatePrice()) + ")"); }; self.calculatePrice = function () { return Math.floor(self.data.basePrice * Math.pow(1.15, self.data.level - 1)); }; self.calculateIncome = function () { return self.data.baseIncome * self.data.level * self.data.upgradeLevel * self.data.owned; }; self.buyBusiness = function () { var price = self.calculatePrice(); if (money >= price) { money -= price; self.data.upgradePrice = Math.floor(self.data.upgradePrice * 1.15); // Increase upgrade price LK.getSound('purchase').play(); if (self.data.owned === 0) { self.data.owned = 1; // Tween to show the business is now active tween(businessGraphics, { alpha: 1 }, { duration: 500 }); } else { self.data.level++; // Scale effect on level up tween(businessGraphics, { scaleX: 1.2, scaleY: 1.2 }, { duration: 300, onFinish: function onFinish() { tween(businessGraphics, { scaleX: 1, scaleY: 1 }, { duration: 300 }); } }); LK.getSound('level_up').play(); } updateMoneyDisplay(); self.updateUI(); saveGame(); } }; self.collectIncome = function () { if (self.data.owned > 0 && self.progress >= 1) { var income = self.calculateIncome(); money += income; // Reset progress self.progress = 0; self.progressFill.width = 0; self.data.lastCollectTime = Date.now(); // Show coin animation spawnCoinEffect(self.x, self.y, income); updateMoneyDisplay(); saveGame(); } }; self.update = function () { if (self.data.owned > 0) { // Only update if not managed or if managed and progress not complete if (!self.data.manager || self.data.manager && self.progress < 1) { // Calculate progress based on time var currentTime = Date.now(); var elapsedTime = currentTime - self.data.lastCollectTime; if (self.data.lastCollectTime > 0) { self.progress = Math.min(1, elapsedTime / self.collectionTime); self.progressFill.width = self.progress * 196; // 196 is the max width } // Auto-collect if manager is hired and progress is complete if (self.data.manager && self.progress >= 1) { self.collectIncome(); } } } // Hide progress bar if business not owned self.progressBg.visible = self.data.owned > 0; self.progressFill.visible = self.data.owned > 0; // Update buy button based on affordability if (money >= self.calculatePrice()) { self.buyBtn.tint = 0x4CAF50; // Green } else { self.buyBtn.tint = 0x888888; // Gray } }; // Initial setup if (self.data.owned === 0) { businessGraphics.alpha = 0.5; // Dim if not owned } self.updateUI(); return self; }); var ClickableButton = Container.expand(function () { var self = Container.call(this); var buttonGraphics = self.attachAsset('upgrade_btn', { anchorX: 0.5, anchorY: 0.5 }); var buttonText = new Text2('Collect', { size: 36, fill: 0xFFFFFF }); buttonText.anchor.set(0.5, 0.5); self.addChild(buttonText); buttonGraphics.interactive = true; buttonGraphics.down = function () { money += 10; // Add 10 to money on click updateMoneyDisplay(); LK.getSound('coin_collect').play(); }; return self; }); var Coin = Container.expand(function (value) { var self = Container.call(this); var coinGraphics = self.attachAsset('coin', { anchorX: 0.5, anchorY: 0.5 }); var valueText = new Text2("$" + formatMoney(value), { size: 30, fill: 0xFFFFFF }); valueText.anchor.set(0.5, 0.5); valueText.y = -30; self.addChild(valueText); self.update = function () { self.y -= 3; self.alpha -= 0.02; if (self.alpha <= 0) { self.destroy(); } }; return self; }); var ManagerButton = Container.expand(function (business) { var self = Container.call(this); self.business = business; var btnGraphics = self.attachAsset('manager_btn', { anchorX: 0.5, anchorY: 0.5 }); var nameText = new Text2(business.data.name + " Manager", { size: 36, fill: 0xFFFFFF }); nameText.anchor.set(0.5, 0.5); nameText.y = -20; self.addChild(nameText); var priceText = new Text2("$" + formatMoney(business.data.managerPrice), { size: 32, fill: 0xFFFFFF }); priceText.anchor.set(0.5, 0.5); priceText.y = 20; self.addChild(priceText); self.update = function () { self.visible = !business.data.manager && business.data.owned > 0; if (self.visible) { if (money >= business.data.managerPrice) { btnGraphics.tint = 0x2196F3; // Blue } else { btnGraphics.tint = 0x888888; // Gray } } }; btnGraphics.interactive = true; btnGraphics.down = function () { if (money >= business.data.managerPrice && !business.data.manager) { money -= business.data.managerPrice; business.data.manager = true; LK.getSound('purchase').play(); updateMoneyDisplay(); saveGame(); } }; return self; }); var UpgradeButton = Container.expand(function (business) { var self = Container.call(this); self.business = business; var btnGraphics = self.attachAsset('upgrade_btn', { anchorX: 0.5, anchorY: 0.5 }); var nameText = new Text2("Upgrade", { size: 36, fill: 0xFFFFFF }); nameText.anchor.set(0.5, 0.5); nameText.y = -20; self.addChild(nameText); var priceText = new Text2("$" + formatMoney(business.data.upgradePrice), { size: 32, fill: 0xFFFFFF }); priceText.anchor.set(0.5, 0.5); priceText.y = 20; self.addChild(priceText); self.update = function () { self.visible = business.data.owned > 0; if (self.visible) { if (money >= business.data.upgradePrice) { btnGraphics.tint = 0x4CAF50; // Green } else { btnGraphics.tint = 0x888888; // Gray } } }; btnGraphics.interactive = true; btnGraphics.down = function () { if (money >= business.data.upgradePrice) { money -= business.data.upgradePrice; business.data.upgradeLevel++; business.data.upgradePrice = Math.floor(business.data.upgradePrice * 1.15); // Increase upgrade price LK.getSound('purchase').play(); updateMoneyDisplay(); saveGame(); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2C3E50 }); /**** * Game Code ****/ var clickableButton = new ClickableButton(); clickableButton.x = 2048 / 2; clickableButton.y = 2732 / 2; // Center the button vertically clickableButton.scaleX = 1.5; // Enlarge the button clickableButton.scaleY = 1.5; game.addChild(clickableButton); var money = 0; var businesses = []; var managerButtons = []; var coins = []; var lastSaveTime = storage.lastSaveTime || Date.now(); // Money display var moneyText = new Text2("$" + formatMoney(money), { size: 80, fill: 0xFFFFFF }); moneyText.anchor.set(0.5, 0); LK.gui.top.addChild(moneyText); // Create businesses for (var i = 0; i < storage.businesses.length; i++) { var businessData = storage.businesses[i]; var business = new Business(businessData); // Position each business in a column business.x = 2048 / 2; business.y = 450 + i * 450; game.addChild(business); businesses.push(business); // Create manager button var managerBtn = new ManagerButton(business); managerBtn.x = 1650; managerBtn.y = 450 + i * 450; game.addChild(managerBtn); managerButtons.push(managerBtn); // Create upgrade button var upgradeBtn = new UpgradeButton(business); upgradeBtn.x = 2048 - 150; // Position near the right edge upgradeBtn.y = 50 + i * 100; // Position in the top right, spaced vertically game.addChild(upgradeBtn); // Initialize last collect time if needed if (businessData.owned > 0 && businessData.lastCollectTime === 0) { businessData.lastCollectTime = Date.now(); } } // Calculate offline earnings function calculateOfflineEarnings() { var offlineTime = Date.now() - lastSaveTime; var totalEarnings = 0; for (var i = 0; i < storage.businesses.length; i++) { var business = storage.businesses[i]; if (business.owned > 0 && business.manager) { // Calculate cycles completed during offline time var cycleTime = 3000; // Same as in Business class var cycles = Math.floor(offlineTime / cycleTime); var income = business.baseIncome * business.level * business.upgradeLevel * business.owned; totalEarnings += cycles * income; } } return totalEarnings; } // Apply offline earnings function applyOfflineEarnings() { var earnings = calculateOfflineEarnings(); if (earnings > 0) { money += earnings; updateMoneyDisplay(); // Show popup for offline earnings var earningsText = new Text2("Welcome Back!\nYou earned $" + formatMoney(earnings) + " while away", { size: 60, fill: 0xFFFFFF }); earningsText.anchor.set(0.5, 0.5); earningsText.x = 2048 / 2; earningsText.y = 2732 / 2; game.addChild(earningsText); // Fade out after a few seconds LK.setTimeout(function () { tween(earningsText, { alpha: 0 }, { duration: 1000, onFinish: function onFinish() { earningsText.destroy(); } }); }, 3000); } } // Format money with abbreviations for large numbers function formatMoney(amount) { if (amount >= 1e12) { return (amount / 1e12).toFixed(1) + "T"; } if (amount >= 1e9) { return (amount / 1e9).toFixed(1) + "B"; } if (amount >= 1e6) { return (amount / 1e6).toFixed(1) + "M"; } if (amount >= 1e3) { return (amount / 1e3).toFixed(1) + "K"; } return Math.floor(amount); } // Update money display function updateMoneyDisplay() { moneyText.setText("$" + formatMoney(money)); } // Spawn coin collection effect function spawnCoinEffect(x, y, value) { var coin = new Coin(value); coin.x = x; coin.y = y; game.addChild(coin); coins.push(coin); LK.getSound('coin_collect').play(); } // Save game state function saveGame() { storage.money = money; storage.lastSaveTime = Date.now(); storage.businesses = []; for (var i = 0; i < businesses.length; i++) { storage.businesses.push(businesses[i].data); } } // Auto-save timer var saveTimer = LK.setInterval(function () { saveGame(); }, 30000); // Save every 30 seconds // Apply offline earnings on game start applyOfflineEarnings(); // Start background music LK.playMusic('bgmusic', { loop: true, fade: { start: 0, end: 0.3, duration: 1000 } }); // Main update loop game.update = function () { // Update all businesses for (var i = 0; i < businesses.length; i++) { businesses[i].update(); } // Update manager buttons for (var i = 0; i < managerButtons.length; i++) { managerButtons[i].update(); } // Update coins for (var i = coins.length - 1; i >= 0; i--) { coins[i].update(); if (coins[i].alpha <= 0) { coins.splice(i, 1); } } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
money: 0,
lastSaveTime: "undefined",
businesses: [{
id: "lemonade_stand",
name: "Lemonade Stand",
level: 1,
basePrice: 4,
baseIncome: 1,
owned: 1,
manager: false,
managerPrice: 1000,
upgradeLevel: 1,
upgradePrice: 50,
lastCollectTime: 0
}, {
id: "restaurant",
name: "Restaurant",
level: 1,
basePrice: 60,
baseIncome: 20,
owned: 0,
manager: false,
managerPrice: 15000,
upgradeLevel: 1,
upgradePrice: 500,
lastCollectTime: 0
}, {
id: "tech_startup",
name: "Tech Startup",
level: 1,
basePrice: 720,
baseIncome: 90,
owned: 0,
manager: false,
managerPrice: 100000,
upgradeLevel: 1,
upgradePrice: 4000,
lastCollectTime: 0
}, {
id: "real_estate",
name: "Real Estate",
level: 1,
basePrice: 8640,
baseIncome: 360,
owned: 0,
manager: false,
managerPrice: 1200000,
upgradeLevel: 1,
upgradePrice: 20000,
lastCollectTime: 0
}]
});
/****
* Classes
****/
var Business = Container.expand(function (data) {
var self = Container.call(this);
self.data = data;
var businessGraphics = self.attachAsset(data.id, {
anchorX: 0.5,
anchorY: 0.5
});
self.progress = 0;
self.collectionTime = 3000; // 3 seconds for collection cycle
// Business info display
self.infoText = new Text2('', {
size: 40,
fill: 0xFFFFFF
});
self.infoText.anchor.set(0.5, 0);
self.infoText.y = 100;
self.addChild(self.infoText);
// Progress bar background
self.progressBg = self.attachAsset('upgrade_btn', {
anchorX: 0.5,
anchorY: 0.5,
width: 200,
height: 20,
y: -100,
tint: 0x555555
});
// Progress bar fill
self.progressFill = self.attachAsset('upgrade_btn', {
anchorX: 0,
anchorY: 0.5,
width: 0,
height: 16,
x: -98,
y: -100,
tint: 0x00FF00
});
// Buy button
self.buyBtn = self.attachAsset('upgrade_btn', {
anchorX: 0.5,
anchorY: 0.5,
y: 150
});
self.buyText = new Text2('Buy', {
size: 36,
fill: 0xFFFFFF
});
self.buyText.anchor.set(0.5, 0.5);
self.buyBtn.addChild(self.buyText);
// Interaction handlers
self.buyBtn.interactive = true;
self.buyBtn.down = function () {
self.buyBusiness();
};
businessGraphics.interactive = true;
businessGraphics.down = function () {
self.collectIncome();
};
self.updateUI = function () {
if (self.data.owned > 0) {
var income = self.calculateIncome();
self.infoText.setText(self.data.name + "\nLvl " + self.data.level + "\nIncome: $" + formatMoney(income));
} else {
self.infoText.setText(self.data.name + "\nCosts: $" + formatMoney(self.calculatePrice()));
}
self.buyText.setText(self.data.owned > 0 ? "Upgrade ($" + formatMoney(self.data.upgradePrice) + ")" : "Buy ($" + formatMoney(self.calculatePrice()) + ")");
};
self.calculatePrice = function () {
return Math.floor(self.data.basePrice * Math.pow(1.15, self.data.level - 1));
};
self.calculateIncome = function () {
return self.data.baseIncome * self.data.level * self.data.upgradeLevel * self.data.owned;
};
self.buyBusiness = function () {
var price = self.calculatePrice();
if (money >= price) {
money -= price;
self.data.upgradePrice = Math.floor(self.data.upgradePrice * 1.15); // Increase upgrade price
LK.getSound('purchase').play();
if (self.data.owned === 0) {
self.data.owned = 1;
// Tween to show the business is now active
tween(businessGraphics, {
alpha: 1
}, {
duration: 500
});
} else {
self.data.level++;
// Scale effect on level up
tween(businessGraphics, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 300,
onFinish: function onFinish() {
tween(businessGraphics, {
scaleX: 1,
scaleY: 1
}, {
duration: 300
});
}
});
LK.getSound('level_up').play();
}
updateMoneyDisplay();
self.updateUI();
saveGame();
}
};
self.collectIncome = function () {
if (self.data.owned > 0 && self.progress >= 1) {
var income = self.calculateIncome();
money += income;
// Reset progress
self.progress = 0;
self.progressFill.width = 0;
self.data.lastCollectTime = Date.now();
// Show coin animation
spawnCoinEffect(self.x, self.y, income);
updateMoneyDisplay();
saveGame();
}
};
self.update = function () {
if (self.data.owned > 0) {
// Only update if not managed or if managed and progress not complete
if (!self.data.manager || self.data.manager && self.progress < 1) {
// Calculate progress based on time
var currentTime = Date.now();
var elapsedTime = currentTime - self.data.lastCollectTime;
if (self.data.lastCollectTime > 0) {
self.progress = Math.min(1, elapsedTime / self.collectionTime);
self.progressFill.width = self.progress * 196; // 196 is the max width
}
// Auto-collect if manager is hired and progress is complete
if (self.data.manager && self.progress >= 1) {
self.collectIncome();
}
}
}
// Hide progress bar if business not owned
self.progressBg.visible = self.data.owned > 0;
self.progressFill.visible = self.data.owned > 0;
// Update buy button based on affordability
if (money >= self.calculatePrice()) {
self.buyBtn.tint = 0x4CAF50; // Green
} else {
self.buyBtn.tint = 0x888888; // Gray
}
};
// Initial setup
if (self.data.owned === 0) {
businessGraphics.alpha = 0.5; // Dim if not owned
}
self.updateUI();
return self;
});
var ClickableButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('upgrade_btn', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2('Collect', {
size: 36,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
buttonGraphics.interactive = true;
buttonGraphics.down = function () {
money += 10; // Add 10 to money on click
updateMoneyDisplay();
LK.getSound('coin_collect').play();
};
return self;
});
var Coin = Container.expand(function (value) {
var self = Container.call(this);
var coinGraphics = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
var valueText = new Text2("$" + formatMoney(value), {
size: 30,
fill: 0xFFFFFF
});
valueText.anchor.set(0.5, 0.5);
valueText.y = -30;
self.addChild(valueText);
self.update = function () {
self.y -= 3;
self.alpha -= 0.02;
if (self.alpha <= 0) {
self.destroy();
}
};
return self;
});
var ManagerButton = Container.expand(function (business) {
var self = Container.call(this);
self.business = business;
var btnGraphics = self.attachAsset('manager_btn', {
anchorX: 0.5,
anchorY: 0.5
});
var nameText = new Text2(business.data.name + " Manager", {
size: 36,
fill: 0xFFFFFF
});
nameText.anchor.set(0.5, 0.5);
nameText.y = -20;
self.addChild(nameText);
var priceText = new Text2("$" + formatMoney(business.data.managerPrice), {
size: 32,
fill: 0xFFFFFF
});
priceText.anchor.set(0.5, 0.5);
priceText.y = 20;
self.addChild(priceText);
self.update = function () {
self.visible = !business.data.manager && business.data.owned > 0;
if (self.visible) {
if (money >= business.data.managerPrice) {
btnGraphics.tint = 0x2196F3; // Blue
} else {
btnGraphics.tint = 0x888888; // Gray
}
}
};
btnGraphics.interactive = true;
btnGraphics.down = function () {
if (money >= business.data.managerPrice && !business.data.manager) {
money -= business.data.managerPrice;
business.data.manager = true;
LK.getSound('purchase').play();
updateMoneyDisplay();
saveGame();
}
};
return self;
});
var UpgradeButton = Container.expand(function (business) {
var self = Container.call(this);
self.business = business;
var btnGraphics = self.attachAsset('upgrade_btn', {
anchorX: 0.5,
anchorY: 0.5
});
var nameText = new Text2("Upgrade", {
size: 36,
fill: 0xFFFFFF
});
nameText.anchor.set(0.5, 0.5);
nameText.y = -20;
self.addChild(nameText);
var priceText = new Text2("$" + formatMoney(business.data.upgradePrice), {
size: 32,
fill: 0xFFFFFF
});
priceText.anchor.set(0.5, 0.5);
priceText.y = 20;
self.addChild(priceText);
self.update = function () {
self.visible = business.data.owned > 0;
if (self.visible) {
if (money >= business.data.upgradePrice) {
btnGraphics.tint = 0x4CAF50; // Green
} else {
btnGraphics.tint = 0x888888; // Gray
}
}
};
btnGraphics.interactive = true;
btnGraphics.down = function () {
if (money >= business.data.upgradePrice) {
money -= business.data.upgradePrice;
business.data.upgradeLevel++;
business.data.upgradePrice = Math.floor(business.data.upgradePrice * 1.15); // Increase upgrade price
LK.getSound('purchase').play();
updateMoneyDisplay();
saveGame();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2C3E50
});
/****
* Game Code
****/
var clickableButton = new ClickableButton();
clickableButton.x = 2048 / 2;
clickableButton.y = 2732 / 2; // Center the button vertically
clickableButton.scaleX = 1.5; // Enlarge the button
clickableButton.scaleY = 1.5;
game.addChild(clickableButton);
var money = 0;
var businesses = [];
var managerButtons = [];
var coins = [];
var lastSaveTime = storage.lastSaveTime || Date.now();
// Money display
var moneyText = new Text2("$" + formatMoney(money), {
size: 80,
fill: 0xFFFFFF
});
moneyText.anchor.set(0.5, 0);
LK.gui.top.addChild(moneyText);
// Create businesses
for (var i = 0; i < storage.businesses.length; i++) {
var businessData = storage.businesses[i];
var business = new Business(businessData);
// Position each business in a column
business.x = 2048 / 2;
business.y = 450 + i * 450;
game.addChild(business);
businesses.push(business);
// Create manager button
var managerBtn = new ManagerButton(business);
managerBtn.x = 1650;
managerBtn.y = 450 + i * 450;
game.addChild(managerBtn);
managerButtons.push(managerBtn);
// Create upgrade button
var upgradeBtn = new UpgradeButton(business);
upgradeBtn.x = 2048 - 150; // Position near the right edge
upgradeBtn.y = 50 + i * 100; // Position in the top right, spaced vertically
game.addChild(upgradeBtn);
// Initialize last collect time if needed
if (businessData.owned > 0 && businessData.lastCollectTime === 0) {
businessData.lastCollectTime = Date.now();
}
}
// Calculate offline earnings
function calculateOfflineEarnings() {
var offlineTime = Date.now() - lastSaveTime;
var totalEarnings = 0;
for (var i = 0; i < storage.businesses.length; i++) {
var business = storage.businesses[i];
if (business.owned > 0 && business.manager) {
// Calculate cycles completed during offline time
var cycleTime = 3000; // Same as in Business class
var cycles = Math.floor(offlineTime / cycleTime);
var income = business.baseIncome * business.level * business.upgradeLevel * business.owned;
totalEarnings += cycles * income;
}
}
return totalEarnings;
}
// Apply offline earnings
function applyOfflineEarnings() {
var earnings = calculateOfflineEarnings();
if (earnings > 0) {
money += earnings;
updateMoneyDisplay();
// Show popup for offline earnings
var earningsText = new Text2("Welcome Back!\nYou earned $" + formatMoney(earnings) + " while away", {
size: 60,
fill: 0xFFFFFF
});
earningsText.anchor.set(0.5, 0.5);
earningsText.x = 2048 / 2;
earningsText.y = 2732 / 2;
game.addChild(earningsText);
// Fade out after a few seconds
LK.setTimeout(function () {
tween(earningsText, {
alpha: 0
}, {
duration: 1000,
onFinish: function onFinish() {
earningsText.destroy();
}
});
}, 3000);
}
}
// Format money with abbreviations for large numbers
function formatMoney(amount) {
if (amount >= 1e12) {
return (amount / 1e12).toFixed(1) + "T";
}
if (amount >= 1e9) {
return (amount / 1e9).toFixed(1) + "B";
}
if (amount >= 1e6) {
return (amount / 1e6).toFixed(1) + "M";
}
if (amount >= 1e3) {
return (amount / 1e3).toFixed(1) + "K";
}
return Math.floor(amount);
}
// Update money display
function updateMoneyDisplay() {
moneyText.setText("$" + formatMoney(money));
}
// Spawn coin collection effect
function spawnCoinEffect(x, y, value) {
var coin = new Coin(value);
coin.x = x;
coin.y = y;
game.addChild(coin);
coins.push(coin);
LK.getSound('coin_collect').play();
}
// Save game state
function saveGame() {
storage.money = money;
storage.lastSaveTime = Date.now();
storage.businesses = [];
for (var i = 0; i < businesses.length; i++) {
storage.businesses.push(businesses[i].data);
}
}
// Auto-save timer
var saveTimer = LK.setInterval(function () {
saveGame();
}, 30000); // Save every 30 seconds
// Apply offline earnings on game start
applyOfflineEarnings();
// Start background music
LK.playMusic('bgmusic', {
loop: true,
fade: {
start: 0,
end: 0.3,
duration: 1000
}
});
// Main update loop
game.update = function () {
// Update all businesses
for (var i = 0; i < businesses.length; i++) {
businesses[i].update();
}
// Update manager buttons
for (var i = 0; i < managerButtons.length; i++) {
managerButtons[i].update();
}
// Update coins
for (var i = coins.length - 1; i >= 0; i--) {
coins[i].update();
if (coins[i].alpha <= 0) {
coins.splice(i, 1);
}
}
};