You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
158 lines
4.9 KiB
158 lines
4.9 KiB
<template> |
|
<div class="row grass-border" id="field"> |
|
<div :class="'crop-field '+(!field.data ? 'empty' : '')" |
|
v-on:click="interactWithField(field)" |
|
v-for="field in fields" |
|
v-bind:key="field.id"> |
|
<img v-if="field.data" class="planted-field" :src="getCropAsset(field)"/> |
|
<div v-if="field.data && field.data.percentDone < 100" class="percent-bar-wrapper"> |
|
<div class="percent-bar" :style="'width:'+field.data.percentDone+'%'"></div> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
<div class="modal fade" id="cropInventoryModal" tabindex="-1" aria-labelledby="cropInventoryModalLabel" |
|
aria-hidden="true"> |
|
<div class="modal-dialog modal-dialog-centered"> |
|
<div class="modal-content steel-border"> |
|
<div class="modal-header"> |
|
<h5 class="modal-title" id="cropInventoryModalLabel">Select a crop to be planted</h5> |
|
</div> |
|
|
|
<div class="modal-body"> |
|
<div class="row"> |
|
<div class="col-6 pixel-border-static" |
|
v-for="seed in $store.getters.getSeedsInInventory" |
|
v-bind:key="seed" |
|
data-bs-dismiss="modal"> |
|
<div v-on:click="plantSeed(seed)"> |
|
<div class="float-end"> |
|
<img :src="seed.assetsFolder+'/6.png'" :alt="seed.name"> |
|
</div> |
|
{{ seed.name }}<br/> |
|
{{ seed.cropData.timeToGrow }} minutes<br/> |
|
({{ seed.quantity }} left) |
|
</div> |
|
</div> |
|
<div v-if="!$store.getters.getSeedsInInventory.length"> |
|
No seeds to plant. |
|
</div> |
|
</div> |
|
</div> |
|
|
|
<div class="modal-footer"> |
|
<button type="button" class="btn btn-pixel-border" data-bs-dismiss="modal">Cancel</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</template> |
|
|
|
<script> |
|
import Modal from 'bootstrap/js/src/modal' |
|
|
|
export default { |
|
name: "CropField", |
|
computed: { |
|
fields() { |
|
return this.$store.state.cropField; |
|
} |
|
}, |
|
methods: { |
|
interactWithField(field) { |
|
if (!field.data) { |
|
this.selectSeed(field.id); |
|
} else if (field.data.readyForHarvest) { |
|
this.harvestField(field); |
|
} |
|
}, |
|
selectSeed(id) { |
|
this.$store.commit('selectField', id); |
|
const modal = new Modal(document.getElementById('cropInventoryModal')) |
|
modal.toggle(); |
|
}, |
|
plantSeed(seed) { |
|
this.$store.commit('plantSeed', seed); |
|
}, |
|
harvestField(field) { |
|
this.$store.commit('harvestSeed', field); |
|
}, |
|
// cropInformation(id) { |
|
// this.$store.commit('selectField', id); |
|
// |
|
// if (!this.$store.getters.selectedField.data) { |
|
// return false; |
|
// } |
|
// |
|
// const modal = new Modal(document.getElementById('cropInformationModal')) |
|
// modal.toggle(); |
|
// return false; |
|
// }, |
|
getCropAsset(field) { |
|
let seed = this.$store.state.itemCatalogue.find((item) => { |
|
return item.id === field.data.seed_id; |
|
}); |
|
|
|
if (field.data.percentDone >= 100) { |
|
return seed.assetsFolder + '5.png'; |
|
} else if (field.data.percentDone > 75) { |
|
return seed.assetsFolder + '4.png'; |
|
} else if (field.data.percentDone > 50) { |
|
return seed.assetsFolder + '3.png'; |
|
} else if (field.data.percentDone > 25) { |
|
return seed.assetsFolder + '2.png'; |
|
} else { |
|
return seed.assetsFolder + '1.png'; |
|
} |
|
} |
|
} |
|
} |
|
</script> |
|
|
|
<style scoped> |
|
#field { |
|
margin: 1em 0.5em 6em 0.5em; |
|
padding-bottom: 0; |
|
background-color: #5A3C28; |
|
align-content: center; |
|
} |
|
|
|
.crop-field { |
|
width: 3.7em; |
|
height: 3.7em; |
|
border-radius: 14px; |
|
background-image: url('@/assets/field/tile057.png'); |
|
background-repeat: no-repeat; |
|
background-size: 100%; |
|
margin: 3px auto; |
|
padding: 0; |
|
} |
|
|
|
.crop-field:hover { |
|
opacity: 0.5; |
|
} |
|
|
|
.crop-field:not(.empty) { |
|
background: |
|
linear-gradient( |
|
rgba(0, 0, 0, 0.2), |
|
rgba(0, 0, 0, 0.2) |
|
), |
|
url('@/assets/field/tile057.png'); |
|
} |
|
|
|
.planted-field { |
|
height: 100%; |
|
width: auto; |
|
} |
|
|
|
.percent-bar-wrapper { |
|
z-index: 300; |
|
margin-top: -0.2em; |
|
} |
|
|
|
.percent-bar { |
|
background-color: green; |
|
height: 0.2em; |
|
} |
|
</style> |