// Configurações do Aim Assist const ASSIST_STRENGTH = 0.5; // Força do auxílio (0 = sem assistência, 1 = mira instantânea) const SMOOTHING = 0.1; // Suavização do movimento para parecer natural // Elementos do jogo const canvas = document.getElementById('gameCanvas'); const ctx = canvas.getContext('2d'); const rect = canvas.getBoundingClientRect(); // Posição atual da mira (crosshair) let crosshair = { x: canvas.width / 2, y: canvas.height / 2 }; // Alvos (inimigos simulados) let targets = []; // Função para criar alvos aleatórios function createTargets() { targets = []; for (let i = 0; i < 3; i++) { targets.push({ x: Math.random() * canvas.width, y: Math.random() * canvas.height, vx: (Math.random() - 0.5) * 4, // Velocidade X vy: (Math.random() - 0.5) * 4, // Velocidade Y radius: 20 }); } } // Função para atualizar posições dos alvos function updateTargets() { targets.forEach(target => { target.x += target.vx; target.y += target.vy; // Rebote nas bordas if (target.x < 0 || target.x > canvas.width) target.vx *= -1; if (target.y < 0 || target.y > canvas.height) target.vy *= -1; }); } // Função para encontrar o alvo mais próximo da mira function getClosestTarget() { let closest = null; let minDist = Infinity; targets.forEach(target => { const dist = Math.hypot(target.x - crosshair.x, target.y - crosshair.y); if (dist < minDist) { minDist = dist; closest = target; } }); return { target: closest, distance: minDist }; } // Função para aplicar aim assist function applyAimAssist() { const closest = getClosestTarget(); if (closest.target && closest.distance > 10) { // Não mira se muito perto (evita tremer) // Calcula a direção para o alvo const dx = closest.target.x - crosshair.x; const dy = closest.target.y - crosshair.y; const dist = Math.hypot(dx, dy); // Ajuste com suavização e força const adjustX = (dx / dist) * ASSIST_STRENGTH * SMOOTHING * dist; const adjustY = (dy / dist) * ASSIST_STRENGTH * SMOOTHING * dist; crosshair.x += adjustX; crosshair.y += adjustY; } } // Evento de movimento do mouse canvas.addEventListener('mousemove', (e) => { const x = e.clientX - rect.left; const y = e.clientY - rect.top; crosshair.x = x; crosshair.y = y; }); // Função de desenho function draw() { ctx.clearRect(0, 0, canvas.width, canvas.height); // Desenha alvos (vermelhos) targets.forEach(target => { ctx.beginPath(); ctx.arc(target.x, target.y, target.radius, 0, Math.PI * 2); ctx.fillStyle = 'red'; ctx.fill(); }); // Desenha crosshair (verde) ctx.beginPath(); ctx.moveTo(crosshair.x - 10, crosshair.y); ctx.lineTo(crosshair.x + 10, crosshair.y); ctx.moveTo(crosshair.x, crosshair.y - 10); ctx.lineTo(crosshair.x, crosshair.y + 10); ctx.strokeStyle = 'green'; ctx.lineWidth = 2; ctx.stroke(); } // Loop principal do jogo function gameLoop() { updateTargets(); applyAimAssist(); // Aplica o aim assist aqui draw(); requestAnimationFrame(gameLoop); } // Inicializa createTargets(); gameLoop();