Implementei algumas validações no código, como diminuir os atributos do robô, não permitir que o contador fique negativo, porém quando chega no valor do contador igual a 1, para fazer a última subtração, não faz.
Arquivo javascript
const controle = document.querySelectorAll("[data-controle]")
const estatisticas = document.querySelectorAll("[data-estatistica]")
const pecas = {
"bracos": {
"forca": 29,
"poder": 35,
"energia": -21,
"velocidade": -5
},
"blindagem": {
"forca": 41,
"poder": 20,
"energia": 0,
"velocidade": -20
},
"nucleos": {
"forca": 0,
"poder": 7,
"energia": 48,
"velocidade": -24
},
"pernas": {
"forca": 27,
"poder": 21,
"energia": -32,
"velocidade": 42
},
"foguetes": {
"forca": 0,
"poder": 28,
"energia": 0,
"velocidade": -2
}
}
controle.forEach((elemento) => {
elemento.addEventListener("click", (evento) => {
// o "parentNode" busca o pai do elemento
manipulaDados(evento.target.dataset.controle, evento.target.parentNode)
atualizaEstatisticas(evento.target.dataset.controle, evento.target.parentNode, evento.target.dataset.peca)
})
})
function manipulaDados(operacao, controle) {
// Aqui o "querySelector" vai busca apenas no elemento filho do "parentNode" passado como parâmentro
const peca = controle.querySelector("[data-contador]")
if (operacao === "-" && peca.value > 0) {
peca.value = parseInt(peca.value) - 1
}
else if(operacao === "+" && peca.value < 99){
peca.value = parseInt(peca.value) + 1
}
}
function atualizaEstatisticas(operacao, controle, peca) {
const contador = controle.querySelector("[data-contador]")
//console.log(pecas[peca]) // Utilizando anotação de colchetes para acessar o objeto pecas;
estatisticas.forEach((elemento) => {
if (operacao === "-" && contador.value > 0) {
elemento.textContent = parseInt(elemento.textContent) - pecas[peca][elemento.dataset.estatistica]
}
else if (operacao === "+" && contador.value < 99) {
elemento.textContent = parseInt(elemento.textContent) + pecas[peca][elemento.dataset.estatistica]
}
})
}