User prompt
Yukarı Para yazan yerin yanına Banka butonu ekle. Oradan 1000 lira borç alalım, her 2 dakikada %25 oranını geri ödemeli.
User prompt
Fabrika açma maliyetine %25 fiyat artışı yap.
User prompt
Madenlerin Oto Üret 500 ve katları sıralansın
User prompt
Fabrikaların Oto Üret 1000 ve katları sıralansın.
User prompt
Üretim süreleri yükseltme yaparak %10 düşürülsün.
User prompt
Üretim süreleri sırası ile 2 ve katları olsun
User prompt
Üretim süreleri ürünün maliyetine göre yeniden oranla belirle.
User prompt
Üretim sürelerini sıfırla.
User prompt
Üretim Süreleri otomatik olarak baştan sen düzenle.
User prompt
Üretim süreleri 1-3-5-7 diye sıralansın.
User prompt
Oto Üret Satın alındıktan sonra kapatılmasın.
User prompt
Üretim süreleri satış fiyatına göre yükselsin. Maksimum 2 dakika Minimum 1 saniye olarak yeniden ayarla.
User prompt
Üretim Sürelerini otomatik yeniden çeşitlendir.
User prompt
Üretim Süresi yazısının arkasına resim paneli ekle.
User prompt
Yukarıdaki ürünlerin isimlerinin altına üretim süreleri yazsın.
User prompt
Fabrikalara üretim süresi ekle. Fabrika seviye yükseldiği zaman üretim hızlansın.
User prompt
Oto Üret maliyetini otomatik yeniden fiyatlandır.
User prompt
Fabrikaların üretim maliyeti satış fiyatının %50'si olsun.
User prompt
MB, CASE, FAN, HDD, COOLER fabrikalarını biraz aşağı indir.
User prompt
Otomatik Üret yazılarını biraz küçült.
User prompt
Otomatik üret butonlarını aşağı indir ve yazı boyutunu biraz büyüt.
User prompt
Otomatik Üret butonlarının bir maliyeti olsun.
User prompt
Fabrika ve Madenlere otomatik üret butonu ekle.
User prompt
Madenlerin otomatik üretimi olmasın.
User prompt
Bütün yükseltme ve açma maliyetini %75 artır.
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Factory class: base for all part factories
var BaseFactory = Container.expand(function () {
var self = Container.call(this);
self.level = 1;
self.production = 1; // per click
self.upgradeCost = 100;
self.partType = null;
// Production time in frames (default 30, halves every 5 levels, min 5)
self.getProductionTime = function () {
// Each 5 levels halves the time, min 5 frames
var base = 30;
var speedup = Math.floor((self.level - 1) / 5);
var prodTime = Math.floor(base / Math.pow(2, speedup));
if (prodTime < 5) prodTime = 5;
return prodTime;
};
self.attachAsset('factory', {
anchorX: 0.5,
anchorY: 0.5
});
// Part icon
var partIcon = null;
if (self.partType) {
partIcon = self.attachAsset('part_' + self.partType, {
anchorX: 0.5,
anchorY: 0.5,
y: -60,
scaleX: 0.7,
scaleY: 0.7
});
}
// Level text
var levelTxt = new Text2('Lv.' + self.level, {
size: 40,
fill: '#fff'
});
levelTxt.anchor.set(0.5, 0);
levelTxt.y = 90;
self.addChild(levelTxt);
self.upgrade = function () {
if (money >= self.upgradeCost) {
money -= self.upgradeCost;
self.level += 1;
self.production += 1;
self.upgradeCost = Math.floor(self.upgradeCost * 3.5);
levelTxt.setText('Lv.' + self.level);
updateMoneyText();
// Reset autoTick so production interval is not skipped after upgrade
self.autoTick = 0;
// Update production time text if present
if (self._prodTimeTxt) {
var prodTime = self.getProductionTime ? self.getProductionTime() : 30;
var prodTimeSec = (prodTime / 60).toFixed(2);
self._prodTimeTxt.setText("Üretim: " + prodTimeSec + " sn");
}
}
};
self.setPartType = function (type) {
self.partType = type;
if (partIcon) partIcon.destroy();
partIcon = self.attachAsset('part_' + type, {
anchorX: 0.5,
anchorY: 0.5,
y: -60,
scaleX: 0.7,
scaleY: 0.7
});
};
return self;
});
// Create a factory class for each part type
// Customer class: comes to store and buys a part
var Customer = Container.expand(function () {
var self = Container.call(this);
self.partType = null;
self.attachAsset('customer', {
anchorX: 0.5,
anchorY: 0.5
});
var partIcon = null;
self.setPart = function (type) {
self.partType = type;
if (partIcon) partIcon.destroy();
partIcon = self.attachAsset('part_' + type, {
anchorX: 0.5,
anchorY: 0.5,
y: 60,
scaleX: 0.5,
scaleY: 0.5
});
};
return self;
});
// Mine class: produces raw materials over time
var Mine = Container.expand(function () {
var self = Container.call(this);
self.level = 1;
self.type = 'copper'; // 'copper', 'silicon', 'iron'
self.production = 1; // per tick
self.timer = 0;
self.upgradeCost = 50;
self.attachAsset('mine', {
anchorX: 0.5,
anchorY: 0.5
});
// Ore icon
var oreIcon = self.attachAsset('ore_' + self.type, {
anchorX: 0.5,
anchorY: 0.5,
y: 60,
scaleX: 0.7,
scaleY: 0.7
});
// Level text
var levelTxt = new Text2('Lv.' + self.level, {
size: 40,
fill: '#fff'
});
levelTxt.anchor.set(0.5, 0);
levelTxt.y = 90;
self.addChild(levelTxt);
self.setType = function (type) {
self.type = type;
oreIcon.destroy();
var newOre = self.attachAsset('ore_' + type, {
anchorX: 0.5,
anchorY: 0.5,
y: 60,
scaleX: 0.7,
scaleY: 0.7
});
};
self.upgrade = function () {
if (money >= self.upgradeCost) {
money -= self.upgradeCost;
self.level += 1;
self.production += 1;
self.upgradeCost = Math.floor(self.upgradeCost * 2.975);
levelTxt.setText('Lv.' + self.level);
updateMoneyText();
}
};
self.update = function () {
self.timer++;
// No automatic production
};
return self;
});
// Store class: sells computer parts to customers
var Store = Container.expand(function () {
var self = Container.call(this);
self.level = 1;
self.sellSpeed = 1; // customers per 2s
self.upgradeCost = 120;
self.attachAsset('store', {
anchorX: 0.5,
anchorY: 0.5
});
// Level text
var levelTxt = new Text2('Lv.' + self.level, {
size: 40,
fill: '#fff'
});
levelTxt.anchor.set(0.5, 0);
levelTxt.y = 90;
self.addChild(levelTxt);
self.upgrade = function () {
if (money >= self.upgradeCost) {
money -= self.upgradeCost;
self.level += 1;
self.sellSpeed += 1;
self.upgradeCost = Math.floor(self.upgradeCost * 3.85);
levelTxt.setText('Lv.' + self.level);
updateMoneyText();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x181818
});
/****
* Game Code
****/
// Create a factory class for each part type
// Button
// Customer
// Factory, Store, Mine icons
// Raw materials (3 types)
// Computer parts (10 types)
// --- Global State ---
var partTypes = ['cpu', 'gpu', 'ram', 'ssd', 'psu', 'mb', 'case', 'fan', 'hdd', 'cooler'];
var oreTypes = ['copper', 'silicon', 'iron'];
var FactoryClasses = {};
for (var i = 0; i < partTypes.length; i++) {
(function (type) {
FactoryClasses[type] = Container.expand(function () {
var self = BaseFactory.call(this);
self.setPartType(type);
return self;
});
})(partTypes[i]);
}
// Inventory
var rawMaterials = {
copper: 10,
silicon: 10,
iron: 10
};
var parts = {};
for (var i = 0; i < partTypes.length; i++) parts[partTypes[i]] = 0;
// Money
var money = 100;
// UI Texts
var moneyTxt = new Text2('₺' + money, {
size: 50,
fill: '#fff'
});
moneyTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(moneyTxt);
function updateMoneyText() {
moneyTxt.setText('₺' + money);
}
var rawTxt = new Text2('', {
size: 40,
fill: '#ffb'
});
rawTxt.anchor.set(0.5, 0);
rawTxt.y = 80;
LK.gui.top.addChild(rawTxt);
function updateRawText() {
rawTxt.setText('Bakır: ' + rawMaterials.copper + ' Silikon: ' + rawMaterials.silicon + ' Demir: ' + rawMaterials.iron);
}
updateRawText();
var partsTxt = new Text2('', {
size: 40,
fill: '#bff'
});
partsTxt.anchor.set(0.5, 0);
partsTxt.y = 140;
LK.gui.top.addChild(partsTxt);
function updatePartsText() {
var s = '';
for (var i = 0; i < partTypes.length; i++) {
s += partTypes[i].toUpperCase() + ':' + parts[partTypes[i]] + ' ';
}
partsTxt.setText(s);
}
updatePartsText();
// --- Mines ---
var mines = [];
var mineAutoProduce = [false, false, false]; // Track auto-produce state for each mine
var mineAutoBtns = [];
var mineAutoTxts = [];
for (var i = 0; i < 3; i++) {
var mine = new Mine();
mine.x = 300 + i * 350;
mine.y = 600;
mine.setType(oreTypes[i]);
game.addChild(mine);
mines.push(mine);
// Add auto-produce toggle button
var autoBtn = LK.getAsset('button', {
anchorX: 0.5,
anchorY: 0.5
});
// Move auto-produce button further down
autoBtn.x = mine.x;
autoBtn.y = mine.y + 480;
game.addChild(autoBtn);
var autoTxt = new Text2('Oto Üret: Kapalı', {
size: 36,
fill: '#fff'
});
autoTxt.anchor.set(0.5, 0.5);
autoTxt.x = autoBtn.x;
autoTxt.y = autoBtn.y;
game.addChild(autoTxt);
autoBtn.mineIndex = i;
autoBtn.down = function (x, y, obj) {
var idx = this.mineIndex;
if (!mineAutoProduce[idx]) {
// Cost to enable auto-produce for mine: 500
var autoMineCost = 500;
if (money >= autoMineCost) {
money -= autoMineCost;
updateMoneyText();
mineAutoProduce[idx] = true;
mineAutoTxts[idx].setText('Oto Üret: Açık');
} else {
// Not enough money, flash button red
tween(this, {
tint: 0xff2222
}, {
duration: 120,
onFinish: function onFinish() {
tween(autoBtn, {
tint: 0x222222
}, {
duration: 120
});
}
});
}
} else {
// Turning off is always free
mineAutoProduce[idx] = false;
mineAutoTxts[idx].setText('Oto Üret: Kapalı');
}
};
mineAutoBtns.push(autoBtn);
mineAutoTxts.push(autoTxt);
// Set initial text
var autoMineCost = 500;
autoTxt.setText('Oto Üret: Kapalı\n₺' + autoMineCost);
}
// --- Factories for each part ---
var factories = [];
var factoryUnlocks = [];
var factoryUnlockCosts = [0, 350, 525, 700, 875, 1050, 1225, 1400, 1575, 1750]; // CPU is free, others cost money to unlock (all costs +75%)
var factoryAutoProduce = [];
var factoryAutoBtns = [];
var factoryAutoTxts = [];
for (var i = 0; i < partTypes.length; i++) {
var FactoryClass = FactoryClasses[partTypes[i]];
var f = new FactoryClass();
// Arrange factories in two rows of 5, with extra vertical spacing between rows
var col = i % 5;
var row = Math.floor(i / 5);
f.x = 500 + col * 300;
// Move MB, CASE, FAN, HDD, COOLER (indices 5,6,7,8,9) further down
// Move the whole factories panel lower by +200px
if (i >= 5) {
// Increase the offset for the second row and move these factories further down
f.y = 1300 + row * 420 + 320;
} else {
f.y = 1300 + row * 420;
}
game.addChild(f);
factories.push(f);
// Add production time text under the part icon
var prodTime = f.getProductionTime ? f.getProductionTime() : 30;
var prodTimeSec = (prodTime / 60).toFixed(2);
var prodTimeTxt = new Text2("Üretim: " + prodTimeSec + " sn", {
size: 32,
fill: "#fff"
});
prodTimeTxt.anchor.set(0.5, 0);
// Place under the part icon (which is at y: -60, scale 0.7, so about -60+60*0.7+10)
prodTimeTxt.x = f.x;
prodTimeTxt.y = f.y - 60 + 60 * 0.7 + 38;
game.addChild(prodTimeTxt);
// Store reference for later update on upgrade
f._prodTimeTxt = prodTimeTxt;
// Unlock state: CPU (i==0) is always unlocked, others locked
factoryUnlocks.push(i === 0 ? true : false);
// Add auto-produce toggle button for each factory
factoryAutoProduce.push(false);
var autoBtn = LK.getAsset('button', {
anchorX: 0.5,
anchorY: 0.5
});
autoBtn.x = f.x;
// Move auto-produce button further down
if (i >= 5) {
autoBtn.y = f.y + 530 + 80;
} else {
autoBtn.y = f.y + 530;
}
game.addChild(autoBtn);
var autoTxt = new Text2('Oto Üret: Kapalı', {
size: 36,
fill: '#fff'
});
autoTxt.anchor.set(0.5, 0.5);
autoTxt.x = autoBtn.x;
autoTxt.y = autoBtn.y;
game.addChild(autoTxt);
autoBtn.factoryIndex = i;
autoBtn.down = function (x, y, obj) {
var idx = this.factoryIndex;
if (!factoryAutoProduce[idx]) {
// Cost to enable auto-produce for factory: 1000
var autoFactoryCost = 1000;
if (money >= autoFactoryCost) {
money -= autoFactoryCost;
updateMoneyText();
factoryAutoProduce[idx] = true;
factoryAutoTxts[idx].setText('Oto Üret: Açık');
} else {
// Not enough money, flash button red
tween(this, {
tint: 0xff2222
}, {
duration: 120,
onFinish: function onFinish() {
tween(autoBtn, {
tint: 0x222222
}, {
duration: 120
});
}
});
}
} else {
// Turning off is always free
factoryAutoProduce[idx] = false;
factoryAutoTxts[idx].setText('Oto Üret: Kapalı');
}
};
factoryAutoBtns.push(autoBtn);
factoryAutoTxts.push(autoTxt);
// Set initial text
var autoFactoryCost = 1000;
autoTxt.setText('Oto Üret: Kapalı\n₺' + autoFactoryCost);
}
// --- Store ---
var store = new Store();
store.x = 1700;
store.y = 600;
game.addChild(store);
// --- Upgrade Buttons ---
var mineBtns = [];
for (var i = 0; i < 3; i++) {
var btn = LK.getAsset('button', {
anchorX: 0.5,
anchorY: 0.5
});
btn.x = mines[i].x - 80; // Move left to make space for produce button
btn.y = mines[i].y + 200;
game.addChild(btn);
var txt = new Text2('Maden Yükselt\n₺' + mines[i].upgradeCost, {
size: 44,
fill: '#fff'
});
txt.anchor.set(0.5, 0.5);
txt.y = btn.y + 20;
txt.x = btn.x;
game.addChild(txt);
btn.mineIndex = i;
btn.txt = txt;
btn.down = function (x, y, obj) {
var idx = this.mineIndex;
var m = mines[idx];
if (money >= m.upgradeCost) {
m.upgrade();
this.txt.setText('Maden Yükselt\n₺' + m.upgradeCost);
}
};
mineBtns.push(btn);
// Add ÜRET (Produce) button next to upgrade
var prodBtn = LK.getAsset('button', {
anchorX: 0.5,
anchorY: 0.5
});
prodBtn.x = mines[i].x + 80; // Place to the right of upgrade button
prodBtn.y = mines[i].y + 320; // moved even lower
game.addChild(prodBtn);
var prodTxt = new Text2('ÜRET', {
size: 44,
fill: '#fff'
});
prodTxt.anchor.set(0.5, 0.5);
prodTxt.x = prodBtn.x;
prodTxt.y = prodBtn.y + 10; // moved higher
game.addChild(prodTxt);
prodBtn.mineIndex = i;
prodBtn.down = function (x, y, obj) {
var idx = this.mineIndex;
var m = mines[idx];
// Instantly produce one batch of raw material for this mine
rawMaterials[m.type] += m.production;
updateRawText();
// Animate mine for feedback
tween(m, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 120,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(m, {
scaleX: 1,
scaleY: 1
}, {
duration: 120
});
}
});
};
}
// Factory upgrade buttons for each part
var factoryBtns = [];
var factoryUnlockBtns = [];
for (var i = 0; i < factories.length; i++) {
var f = factories[i];
// If factory is locked (except CPU), show unlock button instead of upgrade
if (!factoryUnlocks[i]) {
var unlockBtn = LK.getAsset('button', {
anchorX: 0.5,
anchorY: 0.5
});
unlockBtn.x = f.x;
if (i >= 5) {
unlockBtn.y = f.y + 200 + 80;
} else {
unlockBtn.y = f.y + 200;
}
game.addChild(unlockBtn);
var unlockTxt = new Text2(partTypes[i].toUpperCase() + " Aç\n₺" + factoryUnlockCosts[i], {
size: 44,
fill: '#fff'
});
unlockTxt.anchor.set(0.5, 0.5);
unlockTxt.x = unlockBtn.x;
unlockTxt.y = unlockBtn.y + 20;
game.addChild(unlockTxt);
unlockBtn.factoryIndex = i;
unlockBtn.txt = unlockTxt;
unlockBtn.down = function (x, y, obj) {
var idx = this.factoryIndex;
if (!factoryUnlocks[idx] && money >= factoryUnlockCosts[idx]) {
money -= factoryUnlockCosts[idx];
updateMoneyText();
factoryUnlocks[idx] = true;
// Remove unlock button and text
this.destroy();
this.txt.destroy();
// Show upgrade button for this factory
showFactoryUpgradeButton(idx);
}
};
factoryUnlockBtns.push(unlockBtn);
// Don't show upgrade button for locked factories
continue;
}
// Show upgrade button for unlocked factories
var btn = LK.getAsset('button', {
anchorX: 0.5,
anchorY: 0.5
});
btn.x = f.x;
// Move MB, CASE, FAN, HDD, COOLER (indices 5,6,7,8,9) buttons further down
if (i >= 5) {
btn.y = f.y + 200 + 80;
} else {
btn.y = f.y + 200;
}
game.addChild(btn);
var txt = new Text2(partTypes[i].toUpperCase() + " Yükselt\n₺" + f.upgradeCost, {
size: 44,
fill: '#fff'
});
txt.anchor.set(0.5, 0.5);
txt.x = btn.x;
txt.y = btn.y + 20;
game.addChild(txt);
btn.factoryIndex = i;
btn.txt = txt;
btn.down = function (x, y, obj) {
var idx = this.factoryIndex;
var f = factories[idx];
if (money >= f.upgradeCost) {
f.upgrade();
this.txt.setText(partTypes[idx].toUpperCase() + " Yükselt\n₺" + f.upgradeCost);
}
};
factoryBtns.push(btn);
}
// Helper to show upgrade button after unlock
function showFactoryUpgradeButton(idx) {
var f = factories[idx];
var btn = LK.getAsset('button', {
anchorX: 0.5,
anchorY: 0.5
});
btn.x = f.x;
if (idx >= 5) {
btn.y = f.y + 200 + 80;
} else {
btn.y = f.y + 200;
}
game.addChild(btn);
var txt = new Text2(partTypes[idx].toUpperCase() + " Yükselt\n₺" + f.upgradeCost, {
size: 44,
fill: '#fff'
});
txt.anchor.set(0.5, 0.5);
txt.x = btn.x;
txt.y = btn.y + 20;
game.addChild(txt);
btn.factoryIndex = idx;
btn.txt = txt;
btn.down = function (x, y, obj) {
var idx = this.factoryIndex;
var f = factories[idx];
if (money >= f.upgradeCost) {
f.upgrade();
this.txt.setText(partTypes[idx].toUpperCase() + " Yükselt\n₺" + f.upgradeCost);
}
};
factoryBtns[idx] = btn;
}
// Store upgrade button
var storeBtn = LK.getAsset('button', {
anchorX: 0.5,
anchorY: 0.5
});
storeBtn.x = store.x;
storeBtn.y = store.y + 200;
game.addChild(storeBtn);
var storeBtnTxt = new Text2('Mağaza Yükselt\n₺' + store.upgradeCost, {
size: 44,
fill: '#fff'
});
storeBtnTxt.anchor.set(0.5, 0.5);
storeBtnTxt.x = storeBtn.x;
storeBtnTxt.y = storeBtn.y + 20;
game.addChild(storeBtnTxt);
storeBtn.down = function (x, y, obj) {
if (money >= store.upgradeCost) {
store.upgrade();
storeBtnTxt.setText('Mağaza Yükselt\n₺' + store.upgradeCost);
}
};
// --- Production Buttons and Logic for each factory ---
var prodBtns = [];
for (var i = 0; i < factories.length; i++) {
(function (idx) {
var f = factories[idx];
var btn = LK.getAsset('button', {
anchorX: 0.5,
anchorY: 0.5
});
btn.x = f.x;
// Move MB, CASE, FAN, HDD, COOLER (indices 5,6,7,8,9) production buttons further down
if (idx >= 5) {
btn.y = f.y + 350 + 80;
} else {
btn.y = f.y + 350;
}
game.addChild(btn);
var txt = new Text2('ÜRET', {
size: 36,
fill: '#fff'
});
txt.anchor.set(0.5, 0.5);
txt.x = btn.x;
txt.y = btn.y;
game.addChild(txt);
btn.factoryIndex = idx;
btn.down = function (x, y, obj) {
var idx = this.factoryIndex;
// Only allow production if factory is unlocked
if (!factoryUnlocks[idx]) {
// Optionally, flash or shake to indicate locked
tween(factories[idx], {
scaleX: 1.15,
scaleY: 1.15
}, {
duration: 80,
onFinish: function onFinish() {
tween(factories[idx], {
scaleX: 1,
scaleY: 1
}, {
duration: 80
});
}
});
return;
}
var f = factories[idx];
var part = partTypes[idx];
var produced = 0;
for (var j = 0; j < f.production; j++) {
// Each part needs: copper:2, silicon:1, iron:1
// Calculate production cost as 50% of the sale price (which is 30~49, so use 40 as avg, or use 30 + Math.floor(Math.random()*20)/2 for dynamic)
var salePrice = 30 + Math.floor(Math.random() * 20);
var productionCost = Math.floor(salePrice * 0.5);
if (rawMaterials.copper >= 2 && rawMaterials.silicon >= 1 && rawMaterials.iron >= 1 && money >= productionCost) {
rawMaterials.copper -= 2;
rawMaterials.silicon -= 1;
rawMaterials.iron -= 1;
money -= productionCost;
updateMoneyText();
parts[part] += 1;
produced++;
}
}
if (produced > 0) {
updateRawText();
updatePartsText();
// Animate factory
tween(f, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 120,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(f, {
scaleX: 1,
scaleY: 1
}, {
duration: 120
});
}
});
}
};
prodBtns.push(btn);
})(i);
}
// --- Customer/Store Logic ---
var customers = [];
var customerTimer = 0;
var customerInterval = 120; // 2s
function spawnCustomer() {
// Only allow customer for parts that have been produced at least once
var availableParts = [];
for (var i = 0; i < partTypes.length; i++) {
if (parts[partTypes[i]] > 0) {
availableParts.push(partTypes[i]);
}
}
if (availableParts.length === 0) {
// No available parts, do not spawn customer
return;
}
var c = new Customer();
c.x = store.x - 300;
c.y = store.y + 120;
// Pick a random available part type to buy
var idx = Math.floor(Math.random() * availableParts.length);
var part = availableParts[idx];
c.setPart(part);
c.partType = part;
game.addChild(c);
customers.push(c);
// Animate customer moving to store (slower)
tween(c, {
x: store.x
}, {
duration: 1200,
// doubled duration for slower movement
easing: tween.cubicOut
});
}
function processCustomers() {
for (var i = customers.length - 1; i >= 0; i--) {
var c = customers[i];
// If at store, try to sell
if (Math.abs(c.x - store.x) < 10) {
var part = c.partType;
if (parts[part] > 0) {
parts[part] -= 1;
var price = 30 + Math.floor(Math.random() * 20);
money += price;
updateMoneyText();
updatePartsText();
// Animate customer leaving (slower)
tween(c, {
x: store.x + 300
}, {
duration: 800,
// doubled duration for slower movement
onFinish: function onFinish() {
c.destroy();
}
});
customers.splice(i, 1);
}
}
}
}
// --- Game Update ---
game.update = function () {
// Update mines
for (var i = 0; i < mines.length; i++) {
mines[i].update();
// Auto-produce for mine if enabled
if (mineAutoProduce[i]) {
// Produce every 30 frames (~0.5s)
if (!mines[i].autoTick) mines[i].autoTick = 0;
mines[i].autoTick++;
if (mines[i].autoTick >= 30) {
rawMaterials[mines[i].type] += mines[i].production;
updateRawText();
// Animate mine for feedback
tween(mines[i], {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 120,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(this.target, {
scaleX: 1,
scaleY: 1
}, {
duration: 120
});
}.bind({
target: mines[i]
})
});
mines[i].autoTick = 0;
}
}
}
// Auto-produce for factories
for (var i = 0; i < factories.length; i++) {
if (factoryAutoProduce[i] && factoryUnlocks[i]) {
if (!factories[i].autoTick) factories[i].autoTick = 0;
factories[i].autoTick++;
// Use per-factory production time (speed up with level)
var prodTime = factories[i].getProductionTime ? factories[i].getProductionTime() : 30;
if (factories[i].autoTick >= prodTime) {
var f = factories[i];
var part = partTypes[i];
var produced = 0;
for (var j = 0; j < f.production; j++) {
// Each part needs: copper:2, silicon:1, iron:1
// Calculate production cost as 50% of the sale price (which is 30~49, so use 40 as avg, or use 30 + Math.floor(Math.random()*20)/2 for dynamic)
var salePrice = 30 + Math.floor(Math.random() * 20);
var productionCost = Math.floor(salePrice * 0.5);
if (rawMaterials.copper >= 2 && rawMaterials.silicon >= 1 && rawMaterials.iron >= 1 && money >= productionCost) {
rawMaterials.copper -= 2;
rawMaterials.silicon -= 1;
rawMaterials.iron -= 1;
money -= productionCost;
updateMoneyText();
parts[part] += 1;
produced++;
}
}
if (produced > 0) {
updateRawText();
updatePartsText();
// Animate factory
tween(f, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 120,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(this.target, {
scaleX: 1,
scaleY: 1
}, {
duration: 120
});
}.bind({
target: f
})
});
}
factories[i].autoTick = 0;
}
}
}
// Customer spawn logic
customerTimer++;
if (customerTimer >= customerInterval / store.sellSpeed) {
customerTimer = 0;
spawnCustomer();
}
processCustomers();
};
// --- Dragging (for fun, not required) ---
var dragNode = null;
game.down = function (x, y, obj) {
// No drag for now
};
game.move = function (x, y, obj) {
// No drag for now
};
game.up = function (x, y, obj) {
// No drag for now
}; ===================================================================
--- original.js
+++ change.js
@@ -54,8 +54,14 @@
levelTxt.setText('Lv.' + self.level);
updateMoneyText();
// Reset autoTick so production interval is not skipped after upgrade
self.autoTick = 0;
+ // Update production time text if present
+ if (self._prodTimeTxt) {
+ var prodTime = self.getProductionTime ? self.getProductionTime() : 30;
+ var prodTimeSec = (prodTime / 60).toFixed(2);
+ self._prodTimeTxt.setText("Üretim: " + prodTimeSec + " sn");
+ }
}
};
self.setPartType = function (type) {
self.partType = type;
@@ -344,8 +350,22 @@
f.y = 1300 + row * 420;
}
game.addChild(f);
factories.push(f);
+ // Add production time text under the part icon
+ var prodTime = f.getProductionTime ? f.getProductionTime() : 30;
+ var prodTimeSec = (prodTime / 60).toFixed(2);
+ var prodTimeTxt = new Text2("Üretim: " + prodTimeSec + " sn", {
+ size: 32,
+ fill: "#fff"
+ });
+ prodTimeTxt.anchor.set(0.5, 0);
+ // Place under the part icon (which is at y: -60, scale 0.7, so about -60+60*0.7+10)
+ prodTimeTxt.x = f.x;
+ prodTimeTxt.y = f.y - 60 + 60 * 0.7 + 38;
+ game.addChild(prodTimeTxt);
+ // Store reference for later update on upgrade
+ f._prodTimeTxt = prodTimeTxt;
// Unlock state: CPU (i==0) is always unlocked, others locked
factoryUnlocks.push(i === 0 ? true : false);
// Add auto-produce toggle button for each factory
factoryAutoProduce.push(false);
Factory. In-Game asset. 2d. High contrast. No shadows
Copper. In-Game asset. 2d. High contrast. No shadows
Müşteri. In-Game asset. 2d. High contrast. No shadows
Iron. In-Game asset. 2d. High contrast. No shadows
Silicon. In-Game asset. 2d. High contrast. No shadows
Store. In-Game asset. 2d. High contrast. No shadows
CPU. In-Game asset. 2d. High contrast. No shadows
PC Case. In-Game asset. 2d. High contrast. No shadows
PC GPU. In-Game asset. 2d. High contrast. No shadows
PC RAM. In-Game asset. 2d. High contrast. No shadows
PC Klavye. In-Game asset. 2d. High contrast. No shadows
PC Monitör. In-Game asset. 2d. High contrast. No shadows
City. In-Game asset. 2d. High contrast. No shadows
Bilgisayar teknikeri personel. In-Game asset. 2d. High contrast. No shadows
Mavi gömlekli bilgisayar teknikeri personeli. In-Game asset. 2d. High contrast. No shadows
Silver madeni. In-Game asset. 2d. High contrast. No shadows
Altın cevheri. In-Game asset. 2d. High contrast. No shadows
Nikel cevheri. In-Game asset. 2d. High contrast. No shadows
SSD bilgisayar Parçası. In-Game asset. 2d. High contrast. No shadows
PSU bilgisayar Parçası. In-Game asset. 2d. High contrast. No shadows
ANAKART Bilgisayar Parçası. In-Game asset. 2d. High contrast. No shadows
Maden girişi. In-Game asset. 2d. High contrast. No shadows
2000 sayısı ve Buy butonu. In-Game asset. 2d. High contrast. No shadows