-
{{ this.getAmountFormatted() }}
-
-
Buildings owned
-
- -
-
-
Upgrade for {{ building.price }}
+
+
- {{ building.name }} (Level {{ building.level }}) earning {{ building.amount }} every {{ building.intervalInSeconds }} seconds.
-
-
- {{ building.loader }} %
-
+
+
+
+
+
-
-
-
-
-
Buildings to buy
+
+
+ -
+
+
+
![]()
+
+ {{ building.name }} (Level {{ building.level }})
+ {{ building.amount }}
/ {{ building.intervalInSeconds }}s
+
+
+ {{ building.loader }} %
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
- {{ building.name }} could earn {{ building.amount }} every {{ building.intervalInSeconds }} seconds.
+ {{ building.name }}
+ {{ building.amount }}
/ {{ building.intervalInSeconds }}s
+
+
+
diff --git a/js/MoneyManager.js b/js/MoneyManager.js
deleted file mode 100644
index aeb4dc0..0000000
--- a/js/MoneyManager.js
+++ /dev/null
@@ -1,34 +0,0 @@
-class MoneyManager {
- constructor(startMoney = null) {
- this.money = startMoney ?? this.getSavedMoney();
- return this.saveMoney();
- }
-
- saveMoney() {
- localStorage.setItem('money', String(this.money));
- return this.getSavedMoney();
- }
-
- getSavedMoney() {
- this.money = Number(localStorage.getItem('money') ?? 0);
- return this.money;
- }
-
- add(amount = 0) {
- this.money += amount;
- return this.saveMoney();
- }
-
- sub(amount = 0) {
- this.money -= amount;
- return this.saveMoney();
- }
-
- getAmount() {
- return this.money;
- }
-
- getAmountFormatted() {
- return Intl.NumberFormat('de-DE', {style: 'currency', currency: 'EUR'}).format(this.money);
- }
-}
\ No newline at end of file
diff --git a/js/app.js b/js/app.js
index fe04a97..5178b87 100644
--- a/js/app.js
+++ b/js/app.js
@@ -2,15 +2,53 @@ let game = new Vue({
el: '#root',
data: {
money: 0,
+ resources: {
+ wood: 0,
+ stone: 0
+ },
buildings: [
{
- name: 'TestBuilding',
+ name: 'Bank',
+ intervalInSeconds: 15,
+ amount: 100,
+ level: 1,
+ price: 1000,
+ resource: 'gold',
+ isOwned: true,
+ isUpgradeable: true,
+ maxLevel: 20,
+ priceMultiplicator: 10,
+ intervalMultiplicator: 0.95,
+ icon: 'medieval_largeCastle'
+ },
+ {
+ name: 'Lumberjack',
intervalInSeconds: 10,
- amount: 1000,
+ amount: 2,
level: 0,
price: 100,
- isOwned: false
- }
+ resource: 'wood',
+ isOwned: false,
+ isUpgradeable: true,
+ maxLevel: 15,
+ priceMultiplicator: 2,
+ intervalMultiplicator: 0.95,
+ icon: 'medieval_lumber'
+ },
+ {
+ name: 'Quarry',
+ intervalInSeconds: 20,
+ amount: 2,
+ level: 0,
+ price: 250,
+ resource: 'stone',
+ isOwned: false,
+ isUpgradeable: true,
+ maxLevel: 15,
+ priceMultiplicator: 2,
+ intervalMultiplicator: 0.95,
+ icon: 'medieval_mine'
+ },
],
loadedIntervals: []
},
@@ -31,12 +69,23 @@ let game = new Vue({
return this.money;
},
- add(amount = 0) {
- this.money += amount;
+ add(amount = 0, resource = 'gold') {
+ switch (resource) {
+ case 'wood':
+ this.resources.wood += amount;
+ break;
+ case 'stone':
+ this.resources.stone += amount;
+ break;
+ case 'gold':
+ this.money += amount;
+ break;
+ }
+
return this.saveMoney();
},
- sub(amount = 0) {
+ sub(amount = 0, resource = false) {
this.money -= amount;
return this.saveMoney();
},
@@ -55,26 +104,29 @@ let game = new Vue({
let game = this;
this.buildings.forEach((building) => {
if (building.isOwned) {
- this.loadedIntervals.push(
- setInterval(() => {
- game.add(building.amount);
- }, building.intervalInSeconds * 1000)
- );
-
- this.loadedIntervals.push(
- setInterval(() => {
- if (building.loader < 100) {
- building.loader += 10;
- } else {
- building.loader = 10;
- }
-
- game.$forceUpdate()
- }, building.intervalInSeconds / 10 * 1000)
- )
+ game.initiateIntervals(building);
}
});
},
+
+ initiateIntervals(building) {
+ building.intervalEarnID = setInterval(() => {
+ game.add(building.amount, building.resource);
+ }, building.intervalInSeconds * 1000);
+
+ building.intervalLoadingID = setInterval(() => {
+ if (building.loader < 100) {
+ building.loader += 10;
+ } else {
+ building.loader = 10;
+ }
+
+ game.$forceUpdate()
+ }, building.intervalInSeconds / 10 * 1000)
+
+
+ this.loadedIntervals.push(building.intervalEarnID, building.intervalLoadingID);
+ },
killIntervals() {
this.buildings.forEach((building) => {
@@ -113,23 +165,33 @@ let game = new Vue({
},
upgradeBuilding(building, first = false) {
- this.killIntervals();
+ // this.killIntervals();
- if (building.level < 15) {
+ if (building.level < (building.maxLevel - 1)) {
building.level++;
} else {
building.level = 'MAX';
+ building.isUpgradeable = false;
}
- building.price = Number(building.price * 1.25).toFixed(2);
+ building.price = Number(building.price * building.priceMultiplicator).toFixed(2);
if (first === false) {
- building.intervalInSeconds = Number(building.intervalInSeconds * 0.95).toFixed(2);
+ building.intervalInSeconds = Number(building.intervalInSeconds * building.intervalMultiplicator).toFixed(2);
}
- this.reloadBuildings();
+ // this.reloadBuildings();
+ this.reloadSingleBuilding(building);
this.saveBuildings();
},
+
+ reloadSingleBuilding(building) {
+ clearInterval(building.intervalEarnID);
+ clearInterval(building.intervalLoadingID);
+ building.loader = 10;
+
+ this.initiateIntervals(building);
+ },
saveBuildings() {
localStorage.setItem('buildings', JSON.stringify(this.buildings));