diff --git a/.github/workflows/gh-pages-deploy.yml b/.github/workflows/gh-pages-deploy.yml index 14ca1bd2..c1541671 100644 --- a/.github/workflows/gh-pages-deploy.yml +++ b/.github/workflows/gh-pages-deploy.yml @@ -3,20 +3,27 @@ push: branches: - main + permissions: + contents: write + pages: write + id-token: write + pull-requests: write + issues: write + repository-projects: write jobs: gh-pages-deploy: name: Deploying to Github Pages runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - with: - token: ${{ secrets.PAGES_TOKEN }} - - uses: actions/setup-node@v2 + - name: checkout + uses: actions/checkout@v2 + - name: setup-node + uses: actions/setup-node@v2 with: node-version: '16' - name: Install packages run: npm i - name: Set Creds - run: git config user.name "Tendsty" && git config user.email "137620092+Tendsty@users.noreply.github.com" + run: git config user.name "Anti27" && git config user.email "20539129+Anti27@users.noreply.github.com" - name: Deploy - run: npm run deploy \ No newline at end of file + run: npm run deploy diff --git a/package.json b/package.json index 206ca121..72c59168 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gooboo", - "version": "1.4.1", + "version": "1.5.3", "description": "An idle game", "author": "Tendsty", "main": "main.js", diff --git a/public/version.txt b/public/version.txt index 347f5833..8af85beb 100644 --- a/public/version.txt +++ b/public/version.txt @@ -1 +1 @@ -1.4.1 +1.5.3 diff --git a/src/App.vue b/src/App.vue index ae4dc0a8..b510a5b4 100644 --- a/src/App.vue +++ b/src/App.vue @@ -425,6 +425,9 @@ {{ $vuetify.lang.t('$vuetify.gooboo.saveImport') }} + + {{ $vuetify.lang.t('$vuetify.gooboo.resetProgress') }} + @@ -488,8 +491,10 @@ import { mapGetters, mapState } from 'vuex'; import FeatureTile from './components/partial/main/FeatureTile.vue'; import NewGame from './components/view/NewGame.vue'; import OfflineSummary from './components/view/OfflineSummary.vue'; +import ResetProgress from './components/view/ResetProgress.vue'; import Mining from './components/view/Mining.vue'; import Info from './components/view/Info.vue'; +import StatOverview from './components/view/StatOverview.vue'; import TabDuplicate from './components/view/TabDuplicate.vue'; import Patchnote from './components/view/Patchnote.vue'; import Settings from './components/view/Settings.vue'; @@ -535,8 +540,10 @@ export default { components: { NewGame, OfflineSummary, + ResetProgress, Mining, Info, + StatOverview, TabDuplicate, Patchnote, Settings, @@ -687,8 +694,8 @@ export default { this.$store.commit('system/resetAutosaveTimer'); }, exportSave() { - exportFile(); this.$store.commit('system/updateKey', {key: 'backupTimer', value: 0}); + exportFile(); }, importSave() { let file = document.getElementById('gooboo-savefile-input').files[0]; diff --git a/src/components/partial/card/CardItem.vue b/src/components/partial/card/CardItem.vue index fda74bfb..4dd00bed 100644 --- a/src/components/partial/card/CardItem.vue +++ b/src/components/partial/card/CardItem.vue @@ -45,6 +45,36 @@ top: -5px; font-size: 10px; } +.card-playing-power-dark { + border: 4px solid white !important; +} +.card-playing-power-light { + border: 4px solid black !important; +} +.card-playing-power { + position: absolute; + width: 24px; + height: 24px; + right: -18px; + top: -26px; +} +.card-playing-power-inner { + width: 20px; + height: 20px; + margin-left: -2px; + margin-top: -2px; +} +.card-playing-power-mobile { + width: 20px; + height: 20px; + right: -15px; + top: -16px; +} +.card-playing-power-mobile > .card-playing-power-inner { + width: 16px; + height: 16px; + font-size: 12px; +} .card-playing-inner { border-top: 2px solid black !important; border-bottom: 2px solid black !important; @@ -76,6 +106,30 @@ .card-ma-05 { margin: 2px; } + +/* shiny card visuals */ +@keyframes shiny-card { + 0% {opacity: 30%;} + 10% {opacity: 40%;} + 20% {opacity: 55%;} + 30% {opacity: 30%;} + 40% {opacity: 40%;} + 50% {opacity: 30%;} + 60% {opacity: 60%;} + 70% {opacity: 40%;} + 80% {opacity: 30%;} + 90% {opacity: 45%;} + 100% {opacity: 30%;} +} +.card-shiny { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background: linear-gradient(25deg, #FFFFFFFF, #E0F0FFC0); + animation: shiny-card 10s linear infinite; +} @@ -20,6 +21,9 @@ export default { }, premium() { return this.building.maxPremium - this.building.cachePremium; + }, + owned() { + return this.building.max - this.building.cacheAmount; } } } diff --git a/src/components/partial/farm/CropCard.vue b/src/components/partial/farm/CropCard.vue index 2eef6b6a..bb3d89d4 100644 --- a/src/components/partial/farm/CropCard.vue +++ b/src/components/partial/farm/CropCard.vue @@ -53,8 +53,8 @@ mdi-circle-small - - {{ $vuetify.lang.t('$vuetify.gooboo.free') }} + + {{ $vuetify.lang.t('$vuetify.gooboo.free') }} @@ -66,7 +65,7 @@ export default { } }, data: () => ({ - colors: ['green', 'yellow', 'red', 'blue', 'orange', 'pink', 'purple', 'brown'] + colors: ['brown', 'green', 'light-green', 'yellow', 'orange', 'red', 'pink', 'purple', 'indigo', 'blue'] }), methods: { deleteMode() { @@ -113,7 +112,7 @@ export default { } }, selectColor(name) { - this.$store.commit('farm/updateKey', {key: 'selectedColor', value: name}); + this.$store.commit('farm/updateKey', {key: 'selectedColor', value: this.selectedColor === name ? null : name}); }, toggleColors() { this.$store.commit('farm/updateKey', {key: 'showColors', value: !this.showColors}); diff --git a/src/components/partial/farm/GeneIcon.vue b/src/components/partial/farm/GeneIcon.vue index c55c82af..a183e9cb 100644 --- a/src/components/partial/farm/GeneIcon.vue +++ b/src/components/partial/farm/GeneIcon.vue @@ -12,7 +12,7 @@
- -   + {{ $vuetify.lang.t(`$vuetify.tag.${ elem.name }`, ...elem.value) }} +
@@ -86,7 +89,10 @@
-   + {{ $vuetify.lang.t(`$vuetify.tag.${ elem.name }`, ...elem.value) }} +
@@ -100,7 +106,7 @@
- + {{ $vuetify.lang.t('$vuetify.gooboo.maxed') }} @@ -180,11 +186,36 @@ export default { } } else if (elem.type === 'mult' && elem.value > 0) { value = Math.pow(value, masteryMult); + } else if (elem.type === 'tag') { + value = value.map(el => el * masteryMult); } } return {...elem, value}; }); } + obj = obj.map(elem => { + if (elem.type === 'tag') { + const types = this.$store.state.tag[elem.name].params; + return {...elem, value: elem.value.map((el, i) => { + switch (types[i]) { + case 'number': + return this.$formatNum(el, true); + case 'time': + return this.$formatTime(el); + case 'percent': + return this.$formatNum(el * 100, true) + '%'; + case 'perSecond': + return this.$formatNum(el, true) + '/s'; + case 'mult': + return this.$formatNum(el, true) + 'x'; + default: + return el; + } + })}; + } else { + return elem; + } + }); return obj; }, itemsFull() { @@ -204,11 +235,20 @@ export default { }, statDiff() { let after = [...this.item.stats(this.item.level + 1), ...this.item.active(this.item.level + 1), {value: this.item.cooldown(this.item.level + 1)}]; - return [...this.item.stats(this.item.level), ...this.item.active(this.item.level).map(elem => { - return {...elem, type: 'hordeActive', name: elem.type}; + let buffs = []; + const stats = [...this.item.stats(this.item.level), ...this.item.active(this.item.level).map(elem => { + return {...elem, type: elem.type === 'buff' ? 'hordeBuff' : 'hordeActive', name: elem.type}; }), {type: 'hordeCooldown', name: 'cooldown', value: this.item.cooldown(this.item.level)}].map((elem, key) => { - return {type: elem.type, name: elem.name, before: elem.value, after: after[key].value} - }).filter(elem => elem.before !== elem.after); + if (elem.type === 'hordeBuff') { + elem.effect.forEach((buff, bindex) => { + buffs.push({type: buff.type, name: buff.name, before: buff.value, after: after[key].effect[bindex].value, isBuff: true}); + }); + } else if (elem.type === 'hordeActive' && elem.canCrit !== undefined) { + buffs.push({type: 'hordeActiveCrit', name: elem.name, before: elem.canCrit, after: after[key].canCrit, isBuff: false}); + } + return {type: elem.type, name: elem.name, before: elem.value, after: after[key].value, isBuff: false}; + }); + return [...stats, ...buffs].filter(elem => elem.before !== elem.after); }, masteryZoneNeeded() { return Math.max(75, this.item.findZone + 25); @@ -218,7 +258,7 @@ export default { }, masteryPercent() { const before = this.item.masteryLevel > 0 ? this.$store.getters['horde/masteryRequired'](this.name, this.item.masteryLevel - 1) : 0; - return 100 * (this.item.masteryPoint - before) / this.masteryNeeded; + return 100 * (this.item.masteryPoint - before) / (this.masteryNeeded - before); }, canUseActive() { return this.item.equipped && !this.item.passive; @@ -242,7 +282,7 @@ export default { return this.$store.getters['mult/get']('hordeItemMasteryGain', this.masteryGainBase); }, masteryGainMiniboss() { - return this.masteryGainBase * HORDE_MASTERY_MINIBOSS_MULT; + return this.masteryGainBoss * HORDE_MASTERY_MINIBOSS_MULT; }, masteryMinibossMult() { return HORDE_MASTERY_MINIBOSS_MULT; diff --git a/src/components/partial/horde/PlayerStatus.vue b/src/components/partial/horde/PlayerStatus.vue index e23a29b0..b99c3916 100644 --- a/src/components/partial/horde/PlayerStatus.vue +++ b/src/components/partial/horde/PlayerStatus.vue @@ -4,11 +4,27 @@ left: 4px; top: 4px; } +.health-bar-defense { + position: absolute; + left: 0; + bottom: 0; + height: 3px; +} +.health-bar-execute { + position: absolute; + top: 0; + bottom: 0; + width: 2px; + opacity: 0.5; +}