Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Estatísticas estão apenas somando

Quando eu acrescento ou diminuo uma peça as estatísticas seguem somando, como faço para somar ou diminuir as estatísticas a depender do que o usuário selecione?

Já testei a resolução do professor, já tentei resolver com if (mas dá um erro) e vi a resolução de um usuário que postou aqui no fórum que estava com o mesmo problema, mas a solução dele não funcionou comigo.

Código JS:

const controle = document.querySelectorAll('[data-controle]')
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
}
}
const estatistica = document.querySelectorAll('[data-estatistica]')
console.log(estatistica)

controle.forEach( (elemento) => {
  elemento.addEventListener('click', (evento)=> {
    manipulaDados(evento.target.dataset.controle, evento.target.parentNode)
    atualizaEstatistica(evento.target.dataset.peca)
  })
});

function manipulaDados(operacao, controle) {
  const peca = controle.querySelector('[data-contador]')
  if (operacao ==='+') {
    peca.value = Number(peca.value) + 1
  } else {
    peca.value = Number(peca.value) - 1
  } 
}

function atualizaEstatistica(peca) {
 estatistica.forEach( (elemento) => {
    elemento.textContent = Number(elemento.textContent) + pecas[peca][elemento.dataset.estatistica] 
  })

}

Índices zerados

Acrescido um braçoretirado um braço do robô

2 respostas
solução!

Consegui resolver o problema, podem desconsiderar o post (não sei se tem como apagar, eu tentei e não consegui).

controle.forEach( (elemento) => {
  elemento.addEventListener('click', (evento)=> {
    manipulaDados(evento.target.dataset.controle, evento.target.parentNode)
    atualizaEstatistica(evento.target.dataset.peca, **evento.target.dataset.controle**)
  })
});

function atualizaEstatistica(peca, **operacao**) {
 if(operacao === "+") {
    estatistica.forEach( (elemento) => {
      elemento.textContent = parseInt(elemento.textContent) + pecas[peca][elemento.dataset.estatistica];
    })
  } else {
    estatistica.forEach( (elemento) => {
      elemento.textContent = parseInt(elemento.textContent) - pecas[peca][elemento.dataset.estatistica];
    })
  }
}

Oi Anna, tudo bem?

Que bom que conseguiu resolver o problema e muito obrigada por postar a solução também, com certeza pode ajudar alguém no futuro :D

Irei finalizar o tópico pra você.

Um abraço e bons estudos.