const socketIO = require("socket.io"); const Playground = require("./Classes/Playground/Playground"); const Game = require("./Game"); const Snake = require("./Classes/Snake/Snake"); const FruitManager = require("./Classes/Fruits/FruitManager"); class GameLoop{ /** @param {socketIO.Server} io @param {Game} game */ constructor(io, game) { this.io = io; this.game = game; this.playground = new Playground(); /** @type {Array} */ this.snakes = []; this.fruitManager = new FruitManager(this.io, this.game, this.playground); } async loop(){ this.playground.resetPlayground(); await Promise.all(this.snakes.map(snake => snake.move())); this.fruitManager.updateFruits(); this.sendUpdate(); if(this.game.gameStarted){ setTimeout(() => { this.loop(); }, 125); } } sendUpdate(){ this.io.to(`game-${this.game.code}`).emit("loop", { code: this.game.code, score: this.game.score, playground: { tiles: this.playground.tiles, } }); } } module.exports = GameLoop;