MediaWiki:Gadget-hero-comparison.js: Difference between revisions

LVL (talk | contribs)
Created page with "* * Hero Comparison Table - Interactive Spirit Power and Power Increases inputs * Allows real-time recalculation of hero stats: (function() { 'use strict'; // Only run on pages with the hero comparison table if (!document.getElementById('hero-comparison-container')) return; const CONTAINER_ID = 'hero-comparison-container'; const TABLE_ID = 'hero-comparison-table'; function roundToSigFigs(num, sig) { if (num === 0 || !..."
 
LVL (talk | contribs)
Testing fix for dps
Line 59: Line 59:
     function calculateStat(cell, spiritPower, powerIncreases) {
     function calculateStat(cell, spiritPower, powerIncreases) {
         const statName = cell.dataset.statName;
         const statName = cell.dataset.statName;
       
        // --- MULTIPLICATIVE STATS (DPS & SustainedDPS) ---
        // Dynamically compute based on the modified values of sibling cells in the same row
        if (statName === 'DPS' || statName === 'SustainedDPS') {
            const row = cell.closest('tr');
           
            const dmg = calculateLinearStat(row.querySelector('td[data-stat-name="BulletDamage"]'), spiritPower, powerIncreases);
            const rps = calculateLinearStat(row.querySelector('td[data-stat-name="RoundsPerSecond"]'), spiritPower, powerIncreases);
           
            // Check for shotguns/bursts, fallback to 1 if the hero doesn't use standard BulletsPerShot
            const bpsCell = row.querySelector('td[data-stat-name="BulletsPerShot"]');
            const hitOnce = cell.dataset.hitOnce === 'true';
            const bps = hitOnce ? 1 : (bpsCell && bpsCell.dataset.base ? calculateLinearStat(bpsCell, spiritPower, powerIncreases) : 1);
           
            if (statName === 'DPS') {
                return roundToSigFigs(dmg * rps * Math.max(1, bps), 3);
            }
            else if (statName === 'SustainedDPS') {
                const clip = calculateLinearStat(row.querySelector('td[data-stat-name="ClipSize"]'), spiritPower, powerIncreases);
                const reload = calculateLinearStat(row.querySelector('td[data-stat-name="ReloadTime"]'), spiritPower, powerIncreases);
               
                if (rps === 0 || clip === 0) return 0;
                const sustained = (clip * dmg * Math.max(1, bps)) / ((clip / rps) + reload);
                return roundToSigFigs(sustained, 3);
            }
        }
          
          
         // --- LINEAR STATS (Everything Else) ---
         // --- LINEAR STATS (Everything Else) ---