Bon, j'ai pas tout lu, mais déjà node c'est pas méga rapide, donc si tu dois calculer des trajectoires ballistiques par exemple, il te faut un plan B. Compter sur les requêtes WS/HTTP pour recevoir la position d'une balle et d'une cible c'est pas une bonne idée je pense.
Mais sinon en gros pour formaliser ce qui a été dit :
Edit :
Voilà, et avec une "hitbox temporelle" pour des mouvements rapides ça peut le faire. Et comme tu parles de timeline, il faut que tous les events envoyés par les clients soient taggés avec leur timestamp pour les traiter dans l'ordre (dans la mesure du possible, en tenant compte des latences réseau -- tu ne peux pas tout traiter dans l'ordre).
Re edit : d'ailleurs, typiquement ce que je ferais c'est que pour 1 tick je trie tous mes events, et je recalcule le monde pour chacun d'eux :
Mais enfin, au final : c'est pour quel jeu ? As-tu vraiment besoin des ticks ? Ne peux tu pas modéliser côté serveur les entités comme joueur, balle, cible, etc ... et leur faire recevoir leurs évents à chacun ? Ou bien simplement utiliser un tick pour trier les events reçus par timestamp puis envoyer à chaque entité son event ?
Mais sinon en gros pour formaliser ce qui a été dit :
function loop(afterMillisec){
return setTimeout(function(){
startedAt = Date()
calculateNewWorldState()
waitFor = TICK_TIME - (Date() - startedAt) // De mémoire on calcule pas les dates comme ça mais c'est pour l'exemple
loop(waitFor)
}, afterMillisec)
}
Edit :
Citation : Si besoin, tu peux remplacer les calculs discrets (utilisant seulement l'état courant) par des calculs travaillant sur la continuité (CCD, utilisant donc l'état précédent et l'état courant).
Voilà, et avec une "hitbox temporelle" pour des mouvements rapides ça peut le faire. Et comme tu parles de timeline, il faut que tous les events envoyés par les clients soient taggés avec leur timestamp pour les traiter dans l'ordre (dans la mesure du possible, en tenant compte des latences réseau -- tu ne peux pas tout traiter dans l'ordre).
Re edit : d'ailleurs, typiquement ce que je ferais c'est que pour 1 tick je trie tous mes events, et je recalcule le monde pour chacun d'eux :
events = collectClientEvents().sortBy('timestamp')
newWord = events.reduce(function(world, event) {
return word.handle(event) // renvoie un nouveau world
}, currentWorld)
Mais enfin, au final : c'est pour quel jeu ? As-tu vraiment besoin des ticks ? Ne peux tu pas modéliser côté serveur les entités comme joueur, balle, cible, etc ... et leur faire recevoir leurs évents à chacun ? Ou bien simplement utiliser un tick pour trier les events reçus par timestamp puis envoyer à chaque entité son event ?