MediaWiki:Test/Revamp.js: различия между версиями

Страница интерфейса MediaWiki
(Новая страница: «document.addEventListener('DOMContentLoaded', () => { // Конфигурация патронов const ammoConfig = { ammo1: { damage: 15, selector: '.AmmoTest1' }, ammo2: { damage: 20, selector: '.AmmoTest2' } }; // Инициализация системы боеприпасов class AmmoSystem { constructor() { this.totalDamage = 0; this.ammoElements = {}; this.initAmmo();...»)
 
Нет описания правки
 
(не показано 12 промежуточных версий 2 участников)
Строка 1: Строка 1:
document.addEventListener('DOMContentLoaded', () => {
document.addEventListener("DOMContentLoaded", function() {
     // Конфигурация патронов
     const weaponSelect = document.getElementById('weapon-select');
     const ammoConfig = {
     const bulletSelect = document.getElementById('bullet-select');
        ammo1: { damage: 15, selector: '.AmmoTest1' },
    const dpsDisplay = document.getElementById('dps-display');
        ammo2: { damage: 20, selector: '.AmmoTest2' }
    };


     // Инициализация системы боеприпасов
     // Проверка наличия элементов
     class AmmoSystem {
     if (!weaponSelect || !bulletSelect || !dpsDisplay) {
        constructor() {
        console.error("Один из элементов интерфейса не найден!");
            this.totalDamage = 0;
        return;
            this.ammoElements = {};
    }
            this.initAmmo();
            this.initDamageDisplay();
        }


        initAmmo() {
    const WEAPONS = {
            Object.entries(ammoConfig).forEach(([key, config]) => {
        'Vulpaka': { fireRate: 6.6 },
                const element = document.querySelector(config.selector);
    };
                if (element) {
                    element.dataset.damage = config.damage;
                    element.addEventListener('click', () => this.toggleAmmo(element));
                    this.ammoElements[key] = element;
                }
            });
        }


        initDamageDisplay() {
    const BULLETS = {
            this.damageDisplay = document.createElement('div');
        'VulpakaBalls': { damage: 5 },
            this.damageDisplay.className = 'damage-display';
    };
            document.querySelector('.WeaponSummary').appendChild(this.damageDisplay);
            this.updateDisplay();
        }


        toggleAmmo(element) {
    let currentWeapon = weaponSelect.value || Object.keys(WEAPONS)[0];
            element.classList.toggle('active');
    let currentBullet = bulletSelect.value || Object.keys(BULLETS)[0];
            this.calculateDamage();
            this.animateDamage(element);
        }


        calculateDamage() {
    function calculateDPS() {
            this.totalDamage = Object.values(this.ammoElements)
        const weapon = WEAPONS[currentWeapon] || { fireRate: 0 };
                .filter(ammo => ammo.classList.contains('active'))
        const bullet = BULLETS[currentBullet] || { damage: 0 };
                .reduce((sum, ammo) => sum + parseInt(ammo.dataset.damage), 0);
       
        }
        const dps = bullet.damage * weapon.fireRate;
        dpsDisplay.textContent = dps.toFixed(1);
    }


        updateDisplay() {
    weaponSelect.addEventListener('change', function() {
            this.damageDisplay.textContent = `Суммарный урон: ${this.totalDamage}`;
        currentWeapon = this.value;
            this.damageDisplay.classList.toggle('updated', false);
        calculateDPS();
            void this.damageDisplay.offsetWidth; // Trigger reflow
    });
            this.damageDisplay.classList.toggle('updated', true);
        }


        animateDamage(element) {
    bulletSelect.addEventListener('change', function() {
            element.style.transform = 'scale(1.1)';
        currentBullet = this.value;
            setTimeout(() => {
        calculateDPS();
                element.style.transform = 'scale(1)';
    });
                this.updateDisplay();
            }, 150);
        }
    }


     // Запуск системы
     // Первоначальный расчёт
     new AmmoSystem();
     calculateDPS();
});
});

Текущая версия от 20:03, 17 февраля 2025

document.addEventListener("DOMContentLoaded", function() {
    const weaponSelect = document.getElementById('weapon-select');
    const bulletSelect = document.getElementById('bullet-select');
    const dpsDisplay = document.getElementById('dps-display');

    // Проверка наличия элементов
    if (!weaponSelect || !bulletSelect || !dpsDisplay) {
        console.error("Один из элементов интерфейса не найден!");
        return;
    }

    const WEAPONS = {
        'Vulpaka': { fireRate: 6.6 },
    };

    const BULLETS = {
        'VulpakaBalls': { damage: 5 },
    };

    let currentWeapon = weaponSelect.value || Object.keys(WEAPONS)[0];
    let currentBullet = bulletSelect.value || Object.keys(BULLETS)[0];

    function calculateDPS() {
        const weapon = WEAPONS[currentWeapon] || { fireRate: 0 };
        const bullet = BULLETS[currentBullet] || { damage: 0 };
        
        const dps = bullet.damage * weapon.fireRate;
        dpsDisplay.textContent = dps.toFixed(1);
    }

    weaponSelect.addEventListener('change', function() {
        currentWeapon = this.value;
        calculateDPS();
    });

    bulletSelect.addEventListener('change', function() {
        currentBullet = this.value;
        calculateDPS();
    });

    // Первоначальный расчёт
    calculateDPS();
});