Drawaria Magic Effects & Tools

Adds magical particle effects, rainbow cursor trail, and useful drawing tools to drawaria.online!

// ==UserScript==
// @name         Drawaria Magic Effects & Tools
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Adds magical particle effects, rainbow cursor trail, and useful drawing tools to drawaria.online!
// @author       YouTubeDrawaria
// @match        https://drawaria.online/*
// @grant        none
// @license      MIT
// @icon         https://www.google.com/s2/favicons?sz=64&domain=drawaria.online
// ==/UserScript==

(function() {
    'use strict';

    // Configuration
    const config = {
        particlesEnabled: true,
        rainbowTrailEnabled: true,
        magicButtonsEnabled: true,
        floatingHeartsEnabled: true
    };

    // Particle system
    class Particle {
        constructor(x, y) {
            this.x = x;
            this.y = y;
            this.vx = (Math.random() - 0.5) * 4;
            this.vy = (Math.random() - 0.5) * 4;
            this.life = 1.0;
            this.decay = Math.random() * 0.02 + 0.01;
            this.size = Math.random() * 4 + 2;
            this.color = `hsl(${Math.random() * 360}, 70%, 60%)`;
        }

        update() {
            this.x += this.vx;
            this.y += this.vy;
            this.life -= this.decay;
            this.size *= 0.98;
        }

        draw(ctx) {
            ctx.save();
            ctx.globalAlpha = this.life;
            ctx.fillStyle = this.color;
            ctx.beginPath();
            ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
            ctx.fill();
            ctx.restore();
        }
    }

    // Create particle canvas
    function createParticleCanvas() {
        const canvas = document.createElement('canvas');
        canvas.style.position = 'fixed';
        canvas.style.top = '0';
        canvas.style.left = '0';
        canvas.style.width = '100vw';
        canvas.style.height = '100vh';
        canvas.style.pointerEvents = 'none';
        canvas.style.zIndex = '9999';
        canvas.width = window.innerWidth;
        canvas.height = window.innerHeight;
        document.body.appendChild(canvas);
        return canvas;
    }

    // Rainbow cursor trail
    function createRainbowTrail() {
        const trailPoints = [];
        let hue = 0;

        document.addEventListener('mousemove', (e) => {
            if (!config.rainbowTrailEnabled) return;

            trailPoints.push({
                x: e.clientX,
                y: e.clientY,
                hue: hue,
                life: 20
            });

            hue = (hue + 5) % 360;

            if (trailPoints.length > 15) {
                trailPoints.shift();
            }
        });

        return trailPoints;
    }

    // Create magic control panel
    function createMagicPanel() {
        const panel = document.createElement('div');
        panel.innerHTML = `
            <div style="
                position: fixed;
                top: 20px;
                right: 20px;
                background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
                border-radius: 15px;
                padding: 15px;
                box-shadow: 0 8px 32px rgba(0,0,0,0.3);
                color: white;
                font-family: 'Arial', sans-serif;
                z-index: 10000;
                min-width: 200px;
                backdrop-filter: blur(10px);
            ">
                <h3 style="margin: 0 0 15px 0; text-align: center;">✨ Magic Tools ✨</h3>
                <button id="toggleParticles" style="
                    width: 100%;
                    padding: 8px;
                    margin: 5px 0;
                    border: none;
                    border-radius: 8px;
                    background: rgba(255,255,255,0.2);
                    color: white;
                    cursor: pointer;
                    transition: all 0.3s;
                ">🌟 Toggle Particles</button>
                <button id="toggleTrail" style="
                    width: 100%;
                    padding: 8px;
                    margin: 5px 0;
                    border: none;
                    border-radius: 8px;
                    background: rgba(255,255,255,0.2);
                    color: white;
                    cursor: pointer;
                    transition: all 0.3s;
                ">🌈 Toggle Rainbow Trail</button>
                <button id="heartRain" style="
                    width: 100%;
                    padding: 8px;
                    margin: 5px 0;
                    border: none;
                    border-radius: 8px;
                    background: rgba(255,255,255,0.2);
                    color: white;
                    cursor: pointer;
                    transition: all 0.3s;
                ">💖 Heart Rain</button>
                <button id="fireworks" style="
                    width: 100%;
                    padding: 8px;
                    margin: 5px 0;
                    border: none;
                    border-radius: 8px;
                    background: rgba(255,255,255,0.2);
                    color: white;
                    cursor: pointer;
                    transition: all 0.3s;
                ">🎆 Fireworks</button>
            </div>
        `;
        document.body.appendChild(panel);
        return panel;
    }

    // Fireworks effect
    function createFireworks(x, y) {
        const particles = [];
        for (let i = 0; i < 30; i++) {
            particles.push(new Particle(x, y));
        }
        return particles;
    }

    // Heart rain effect
    function createHeartRain() {
        const hearts = [];
        for (let i = 0; i < 20; i++) {
            const heart = document.createElement('div');
            heart.innerHTML = '💖';
            heart.style.position = 'fixed';
            heart.style.left = Math.random() * window.innerWidth + 'px';
            heart.style.top = '-50px';
            heart.style.fontSize = Math.random() * 20 + 20 + 'px';
            heart.style.pointerEvents = 'none';
            heart.style.zIndex = '9998';
            heart.style.transition = 'transform 3s linear';
            document.body.appendChild(heart);
            
            setTimeout(() => {
                heart.style.transform = `translateY(${window.innerHeight + 100}px) rotate(360deg)`;
            }, i * 200);
            
            setTimeout(() => {
                heart.remove();
            }, 3500 + i * 200);
        }
    }

    // Initialize everything
    function init() {
        // Create particle system
        const canvas = createParticleCanvas();
        const ctx = canvas.getContext('2d');
        const particles = [];
        const trailPoints = createRainbowTrail();

        // Create control panel
        const panel = createMagicPanel();

        // Add event listeners
        document.getElementById('toggleParticles').onclick = () => {
            config.particlesEnabled = !config.particlesEnabled;
        };

        document.getElementById('toggleTrail').onclick = () => {
            config.rainbowTrailEnabled = !config.rainbowTrailEnabled;
        };

        document.getElementById('heartRain').onclick = createHeartRain;

        document.getElementById('fireworks').onclick = () => {
            const centerX = window.innerWidth / 2;
            const centerY = window.innerHeight / 2;
            particles.push(...createFireworks(centerX, centerY));
        };

        // Mouse click particles
        document.addEventListener('click', (e) => {
            if (config.particlesEnabled) {
                particles.push(...createFireworks(e.clientX, e.clientY));
            }
        });

        // Animation loop
        function animate() {
            ctx.clearRect(0, 0, canvas.width, canvas.height);

            // Update and draw particles
            if (config.particlesEnabled) {
                for (let i = particles.length - 1; i >= 0; i--) {
                    particles[i].update();
                    particles[i].draw(ctx);
                    
                    if (particles[i].life <= 0) {
                        particles.splice(i, 1);
                    }
                }
            }

            // Draw rainbow trail
            if (config.rainbowTrailEnabled) {
                for (let i = 0; i < trailPoints.length; i++) {
                    const point = trailPoints[i];
                    ctx.save();
                    ctx.globalAlpha = point.life / 20;
                    ctx.fillStyle = `hsl(${point.hue}, 70%, 60%)`;
                    ctx.beginPath();
                    ctx.arc(point.x, point.y, (point.life / 20) * 8, 0, Math.PI * 2);
                    ctx.fill();
                    ctx.restore();
                    
                    point.life--;
                    if (point.life <= 0) {
                        trailPoints.splice(i, 1);
                        i--;
                    }
                }
            }

            requestAnimationFrame(animate);
        }

        animate();

        // Handle window resize
        window.addEventListener('resize', () => {
            canvas.width = window.innerWidth;
            canvas.height = window.innerHeight;
        });

        // Add welcome message
        setTimeout(() => {
            const welcomeMsg = document.createElement('div');
            welcomeMsg.style.cssText = `
                position: fixed;
                top: 50%;
                left: 50%;
                transform: translate(-50%, -50%);
                background: linear-gradient(135deg, #ff6b6b, #4ecdc4);
                color: white;
                padding: 20px;
                border-radius: 15px;
                text-align: center;
                z-index: 10001;
                box-shadow: 0 10px 30px rgba(0,0,0,0.3);
                animation: fadeInOut 4s ease-in-out forwards;
            `;
            welcomeMsg.innerHTML = `
                <h2>🎨 Magic Drawaria Tools Activated! 🎨</h2>
                <p>Click anywhere for fireworks! ✨</p>
                <p>Use the control panel to toggle effects! 🌈</p>
            `;

            // Add CSS animation
            const style = document.createElement('style');
            style.textContent = `
                @keyframes fadeInOut {
                    0% { opacity: 0; transform: translate(-50%, -50%) scale(0.8); }
                    20% { opacity: 1; transform: translate(-50%, -50%) scale(1); }
                    80% { opacity: 1; transform: translate(-50%, -50%) scale(1); }
                    100% { opacity: 0; transform: translate(-50%, -50%) scale(0.8); }
                }
            `;
            document.head.appendChild(style);
            document.body.appendChild(welcomeMsg);

            setTimeout(() => welcomeMsg.remove(), 4000);
        }, 1000);

        console.log('🎉 Drawaria Magic Effects loaded successfully!');
    }

    // Wait for page to load
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', init);
    } else {
        init();
    }
})();