Widget:BoostCalcForm: mudanças entre as edições

sem sumário de edição
Sem resumo de edição
Sem resumo de edição
Linha 45: Linha 45:
</div>
</div>
     </form>
     </form>
<script>
      // Função para formatar numeros para o padrão decimal
        const formatNumber = (number) => Number(number).toLocaleString("pt-BR", { style: "decimal" });
        // Função que retorna o calculo de gasto para boostar um pokemon (Forma normal)
        function calcNormalBoost(initBoost, endBoost, boostType, stonePrice, boostStonePrice) {
            const responseBoost = [];
            let usedNormalStones = 0;
            let usedBoostStones = 0;
            let stonesForBoost = 0;
            for (i = 1; i <= initBoost; i++) {
                if (i % boostType === 0) stonesForBoost++;
            }
            for (i = initBoost + 1; i <= endBoost; i++) {
                if (i % boostType != 0 && i != initBoost) stonesForBoost++;
                if ((stonesForBoost * stonePrice) < boostStonePrice) {
                    usedNormalStones += stonesForBoost;
                } else {
                    usedBoostStones++;
                }
                responseBoost.push(
                    {
                        price: formatNumber((usedNormalStones * stonePrice) + (usedBoostStones * boostStonePrice)),
                        normal_stones: usedNormalStones,
                        boost_stones: usedBoostStones,
                        boost: i
                    }
                );
            }
            return responseBoost;
        }
        // Função que retorna o calculo de gasto para boostar um pokemon (Exceção)
        function calcExceptionBoost(initBoost, endBoost, boostType, stonePrice, boostStonePrice) {
            const responseBoost = [];
            let usedStones = 0;
            let usedNormalStones = 0;
            let usedBoostStones = 0;
            let stonesForBoost = 1;
            for (i = 1; i <= initBoost; i++) {
                if (i < 10) continue;
                if (i % boostType === 0) stonesForBoost++;
            }
            for (i = initBoost + 1; i <= endBoost; i++) {
                if (i < 10) {
                    if (!(i % 2 === 0)) {
                        responseBoost.push(
                            {
                                price: null,
                                necessary_stones: null,
                                boost: i
                            }
                        );
                        continue;
                    }
                    if ((stonesForBoost * stonePrice) < boostStonePrice) {
                        usedNormalStones += stonesForBoost;
                    } else {
                        usedBoostStones++;
                    }
                    responseBoost.push(
                        {
                            price: formatNumber((usedNormalStones * stonePrice) + (usedBoostStones * boostStonePrice)),
                            normal_stones: usedNormalStones,
                            boost_stones: usedBoostStones,
                            boost: i
                        }
                    );
                    continue;
                }
                if ((stonesForBoost * stonePrice) < boostStonePrice) {
                    usedNormalStones += stonesForBoost;
                } else {
                    usedBoostStones++;
                }
                if (i % boostType === 0) stonesForBoost++;
                responseBoost.push(
                    {
                        price: formatNumber((usedNormalStones * stonePrice) + (usedBoostStones * boostStonePrice)),
                        normal_stones: usedNormalStones,
                        boost_stones: usedBoostStones,
                        boost: i
                    }
                );
            }
            return responseBoost;
        }
        document.addEventListener('DOMContentLoaded', function () {
            const form = document.querySelector("[data-target='calcBoostForm']");
            form.addEventListener("submit", function (e) {
                e.preventDefault();
                const formData = new FormData(form);
                const boostType = formData.get("boostType");
                const specialBoost = formData.get("specialBoost");
                const stonePrice = formData.get("stonePrice");
                const boostStonePrice = formData.get("boostStonePrice");
                const startBoost = formData.get("startBoost");
                const endBoost = formData.get("endBoost");
                if (startBoost > endBoost) {
                    alert("O boost inicial não pode ser maior do que o final");
                    return;
                }
                if (specialBoost == "on") {
                    console.log(calcExceptionBoost(startBoost, endBoost, boostType, stonePrice, boostStonePrice));
                } else {
                    console.log(calcNormalBoost(startBoost, endBoost, boostType, stonePrice, boostStonePrice));
                }
            });
        });       
</script>