diff --git a/index.html b/index.html index f146932..79cc4ca 100644 --- a/index.html +++ b/index.html @@ -94,7 +94,7 @@ Redeem reward ({{ currentQuest.reward }} )
- Get Quest (resources needed) + Get a new quest
diff --git a/js/app.js b/js/app.js index a84f9e7..7c4984c 100644 --- a/js/app.js +++ b/js/app.js @@ -12,6 +12,15 @@ let game = new Vue({ coal: 0, planks: 0 }, + hadResource: { + wood: false, + stone: false, + iron: false, + bricks: false, + corn: false, + coal: false, + planks: false + }, storageNames: null, buildings: [ { @@ -139,6 +148,7 @@ let game = new Vue({ this.storageNames = { lastVersion: 'lastVersion', resources: 'resources' + this.version, + hadResource: 'hadResource' + this.version, buildings: 'buildings' + this.version, currentQuest: 'currentQuest' + this.version } @@ -146,6 +156,7 @@ let game = new Vue({ this.checkVersion(); this.checkBuildings(); + this.loadHadResourceFromStorage(); this.loadResourcesFromStorage(); this.currentQuest = JSON.parse(localStorage.getItem(this.storageNames.currentQuest)); @@ -153,6 +164,8 @@ let game = new Vue({ this.reloadBuildings(); }, methods: { + // System & Saving + // Check if a new version is played and notify the user of the loss of his beloved score & progress checkVersion() { let lastVersion = localStorage.getItem(this.storageNames.lastVersion); @@ -163,6 +176,7 @@ let game = new Vue({ localStorage.setItem(this.storageNames.lastVersion, this.version); }, + // Check if buildings-array is outdated checkBuildings() { let savedBuildings = JSON.parse(localStorage.getItem(this.storageNames.buildings)); @@ -174,6 +188,7 @@ let game = new Vue({ } }, + // Save buildings with progress -> has to resetted while in beta via version saveBuildingsToStorage() { localStorage.setItem(this.storageNames.buildings, JSON.stringify(this.buildings)); }, @@ -196,6 +211,7 @@ let game = new Vue({ } }, + // Save resources a user has saveResourcesToStorage() { localStorage.setItem(this.storageNames.resources, JSON.stringify(this.resources)); }, @@ -208,42 +224,65 @@ let game = new Vue({ } }, + // Save resources a user ever had to generate quests + saveHadResourceToStorage() { + localStorage.setItem(this.storageNames.hadResource, JSON.stringify(this.hadResource)); + }, + + loadHadResourceFromStorage: function () { + let savedHadResource = JSON.parse(localStorage.getItem(this.storageNames.hadResource)); + + if (savedHadResource) { + this.hadResource = savedHadResource; + } + }, + + // Resource-Management add(amount = 0, resource = 'gold') { switch (resource) { case 'wood': this.sendResourceMessage(amount, 'wood'); this.resources.wood += amount; + this.hadResource.wood = true; break; case 'planks': this.sendResourceMessage(amount, 'planks'); this.resources.planks += amount; + this.hadResource.planks = true; break; case 'stone': this.sendResourceMessage(amount, 'stone'); this.resources.stone += amount; + this.hadResource.stone = true; break; case 'bricks': this.sendResourceMessage(amount, 'bricks'); this.resources.bricks += amount; + this.hadResource.bricks = true; break; case 'coal': this.sendResourceMessage(amount, 'coal'); this.resources.coal += amount; + this.hadResource.coal = true; break; case 'iron': this.sendResourceMessage(amount, 'iron'); - this.resources.iron = Number(this.resources.iron + amount); + this.resources.iron += amount; + this.hadResource.iron = true; break; case 'corn': this.sendResourceMessage(amount, 'corn'); this.resources.corn += amount; + this.hadResource.corn = true; break; case 'gold': this.sendResourceMessage(amount, 'gold'); this.resources.gold += amount; + this.hadResource.gold = true; break; } + this.saveHadResourceToStorage(); this.saveResourcesToStorage(); }, @@ -252,10 +291,7 @@ let game = new Vue({ return this.saveResourcesToStorage(); }, - getFormattedNumber(value) { - return value.toLocaleString('de-DE'); - }, - + // Buying & upgrading buildings + checks + interval-generators reloadBuildings() { let vue = this; @@ -303,21 +339,6 @@ let game = new Vue({ this.loadedIntervals.push(building.intervalEarnID, building.intervalLoadingID); }, - buildingHasEnoughResourcesToStart(building) { - if (building.requires) { - return ( - building.requires.wood > this.resources.wood || - building.requires.stone > this.resources.stone || - building.requires.iron > this.resources.iron || - building.requires.bricks > this.resources.bricks || - building.requires.coal > this.resources.coal || - building.requires.corn > this.resources.corn - ); - } else { - return true; - } - }, - buyBuilding(building) { if (this.resources.gold >= building.price) { this.sub(building.price); @@ -386,7 +407,24 @@ let game = new Vue({ this.initiateIntervals(building); }, + buildingHasEnoughResourcesToStart(building) { + if (building.requires) { + return ( + building.requires.wood > this.resources.wood || + building.requires.stone > this.resources.stone || + building.requires.iron > this.resources.iron || + building.requires.bricks > this.resources.bricks || + building.requires.coal > this.resources.coal || + building.requires.corn > this.resources.corn + ); + } else { + return true; + } + }, + + // Quests generateQuestWithRandomItems() { + // defines the rates of possible amounts of resources for quests let possibleAmountsForQuest = [ 0, 0, 0, 0, 5, 10, 15, 20, 25, 30, 35, 5, 10, 15, 20, 25, 30, 35, 50 ]; @@ -401,37 +439,37 @@ let game = new Vue({ let rewardSum = 0; - if (this.resources.wood > 0) { + if (this.hadResource.wood > 0) { randomWood = this.getRandomElementForQuestResource(possibleAmountsForQuest); rewardSum += (randomWood * 5); } - if (this.resources.stone > 0) { + if (this.hadResource.stone > 0) { randomStone = this.getRandomElementForQuestResource(possibleAmountsForQuest); rewardSum += (randomStone * 7); } - if (this.resources.iron > 0) { + if (this.hadResource.iron > 0) { randomIron = this.getRandomElementForQuestResource(possibleAmountsForQuest); rewardSum += (randomIron * 200); } - if (this.resources.bricks > 0) { + if (this.hadResource.bricks > 0) { randomBricks = this.getRandomElementForQuestResource(possibleAmountsForQuest); rewardSum += (randomBricks * 25); } - if (this.resources.corn > 0) { + if (this.hadResource.corn > 0) { randomCorn = this.getRandomElementForQuestResource(possibleAmountsForQuest); rewardSum += (randomCorn * 30); } - if (this.resources.coal > 0) { + if (this.hadResource.coal > 0) { randomCoal = this.getRandomElementForQuestResource(possibleAmountsForQuest); rewardSum += (randomCoal * 10); } - if (this.resources.planks > 0) { + if (this.hadResource.planks > 0) { randomPlanks = this.getRandomElementForQuestResource(possibleAmountsForQuest); rewardSum += (randomPlanks * 5); } @@ -503,6 +541,10 @@ let game = new Vue({ }, // Templating + getFormattedNumber(value) { + return value.toLocaleString('de-DE'); + }, + getResourceIconForBuilding(building) { return this.getResourceIcon(building.resource); }, @@ -536,6 +578,8 @@ let game = new Vue({ message: 'You got a reward of ' + reward + ' gold!', position: 'bottomCenter', timeout: 1500, + transitionIn: 'boundInRight', + transitionInMobile: 'boundInRight' }); }, @@ -546,6 +590,8 @@ let game = new Vue({ position: 'bottomCenter', message: amount + ' ' + resource, timeout: 1000, + transitionIn: 'boundInRight', + transitionInMobile: 'boundInRight' }); }, @@ -554,6 +600,8 @@ let game = new Vue({ color: 'green', message: message, position: 'bottomCenter', + transitionIn: 'boundInRight', + transitionInMobile: 'boundInRight' }); }, @@ -563,6 +611,8 @@ let game = new Vue({ message: message, position: 'topCenter', timeout: 7000, + transitionIn: 'boundInRight', + transitionInMobile: 'boundInRight' }); }, @@ -571,6 +621,8 @@ let game = new Vue({ color: 'red', message: message, position: 'bottomCenter', + transitionIn: 'boundInRight', + transitionInMobile: 'boundInRight' }); }, @@ -579,6 +631,8 @@ let game = new Vue({ color: 'blue', message: message, position: 'bottomCenter', + transitionIn: 'boundInRight', + transitionInMobile: 'boundInRight' }); } }