// events.js const events = require('events'); const { calculateElo } = require('./elo'); const { updatePlayerElo } = require('./database'); class GameEventEmitter extends events.EventEmitter {} const gameEventEmitter = new GameEventEmitter(); function handleRoundEnd(redScore, blueScore, playerScores, currentPlayers) { console.log(`Round ended. Red: ${redScore}, Blue: ${blueScore}`); let winningTeam, losingTeam; if (redScore > blueScore) { winningTeam = 'red'; losingTeam = 'blue'; } else if (blueScore > redScore) { winningTeam = 'blue'; losingTeam = 'red'; } else { console.log("It's a draw. No Elo change."); return; } const kFactor = 32; // You can adjust this as needed const winningPlayers = currentPlayers.filter(player => player.team === winningTeam); const losingPlayers = currentPlayers.filter(player => player.team === losingTeam); const averageWinningElo = winningPlayers.reduce((acc, player) => acc + player.elo, 0) / winningPlayers.length; const averageLosingElo = losingPlayers.reduce((acc, player) => acc + player.elo, 0) / losingPlayers.length; winningPlayers.forEach(async (player) => { const individualPerformanceFactor = playerScores[player.id] / redScore; // Adjust based on individual contribution player.elo = calculateElo(player.elo, averageLosingElo, 1 * individualPerformanceFactor, kFactor); await updatePlayerElo(player); }); losingPlayers.forEach(async (player) => { const individualPerformanceFactor = playerScores[player.id] / blueScore; // Adjust based on individual contribution player.elo = calculateElo(player.elo, averageWinningElo, 0 * individualPerformanceFactor, kFactor); await updatePlayerElo(player); }); console.log("Elo ratings updated."); } gameEventEmitter.on('RoundEnd', handleRoundEnd); module.exports = { gameEventEmitter, handleRoundEnd, };