From ac3efda4010a6dcb6c9e7f4bc401aa0e7f335393 Mon Sep 17 00:00:00 2001 From: Ethan O'Brien <77750390+ethanaobrien@users.noreply.github.com> Date: Tue, 19 Sep 2023 10:56:51 -0500 Subject: [PATCH] Better control syncing (for host). Connected users have issues --- data/emulator.js | 31 ++++++++++++++++++------------- data/emulator.min.js | 2 +- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/data/emulator.js b/data/emulator.js index d07445d..95f5c9a 100644 --- a/data/emulator.js +++ b/data/emulator.js @@ -1472,8 +1472,8 @@ class EmulatorJS { if (this.isNetplay && this.netplay.owner) { this.gameManager.saveSaveFiles(); this.gameManager.restart(); + this.netplay.reset(); this.netplay.sendMessage({restart:true}); - this.netplay.current_frame = 0; this.play(); } else if (!this.isNetplay) { this.gameManager.saveSaveFiles(); @@ -4193,6 +4193,7 @@ class EmulatorJS { this.netplay.socket = io(this.netplay.url); this.netplay.socket.on("connect", () => callback()); this.netplay.socket.on("users-updated", (users) => { + this.netplay.reset(); if (this.debug) console.log(users); this.netplay.players = users; this.netplay.updatePlayersTable(); @@ -4415,7 +4416,7 @@ class EmulatorJS { if (this.netplay.ready === this.netplay.getUserCount()) { this.netplay.sendMessage({readyready:true}); this.netplay.reset(); - this.play(true); + setTimeout(() => this.play(true), 48); this.netplay.setLoading(false); } } @@ -4424,6 +4425,7 @@ class EmulatorJS { this.netplay.reset(); this.play(true); } + if (data.shortPause) console.log(data.shortPause); if (data.shortPause && data.shortPause !== this.netplay.playerID) { this.pause(true); this.netplay.wait = true; @@ -4433,11 +4435,14 @@ class EmulatorJS { data["sync-control"].forEach((value) => { let inFrame = parseInt(value.frame); let frame = this.netplay.currentFrame; - this.netplay.inputsData[inFrame] || (this.netplay.inputsData[inFrame] = []); if (!value.connected_input || value.connected_input[0] < 0) return; + //if (value.connected_input[0] === this.netplay.getUserIndex(this.netplay.playerID)) return; + console.log(value, inFrame, frame); if (inFrame === frame) { + inFrame++; this.gameManager.functions.simulateInput(value.connected_input[0], value.connected_input[1], value.connected_input[2]); } + this.netplay.inputsData[inFrame] || (this.netplay.inputsData[inFrame] = []); this.netplay.inputsData[frame] || (this.netplay.inputsData[frame] = []); if (this.netplay.owner) { this.netplay.inputsData[frame].push(value); @@ -4470,8 +4475,8 @@ class EmulatorJS { this.netplay.simulateInput = (player, index, value, resp) => { if (!this.isNetplay) return; if (player !== 0 && !resp) return; - player = this.netplay.getUserIndex(this.netplay.playerID) - const frame = this.netplay.currentFrame; + player = this.netplay.getUserIndex(this.netplay.playerID); + let frame = this.netplay.currentFrame; if (this.netplay.owner) { if (!this.netplay.inputsData[frame]) { this.netplay.inputsData[frame] = []; @@ -4484,7 +4489,7 @@ class EmulatorJS { } else { this.netplay.sendMessage({ "sync-control": [{ - frame: frame, + frame: frame+10, connected_input: [player, index, value] }] }) @@ -4510,23 +4515,23 @@ class EmulatorJS { //frame syncing - working //control syncing - broken - if (!this.isNetplay) return; this.netplay.currentFrame = parseInt(this.gameManager.getFrameNum()) - this.netplay.init_frame; + if (!this.isNetplay) return; if (this.netplay.owner) { let to_send = []; - for (let i=this.netplay.currentFrame-1; i { - to_send.push(value); - }) : to_send.push({frame: i}); - } + let i = this.netplay.currentFrame-1; + this.netplay.inputsData[i] ? this.netplay.inputsData[i].forEach((value) => { + value.frame+=10; + to_send.push(value); + }) : to_send.push({frame: i+10}); this.netplay.sendMessage({"sync-control": to_send}); } else { if (this.netplay.currentFrame <= 0 || this.netplay.inputsData[this.netplay.currentFrame]) { this.netplay.wait = false; this.play(); this.netplay.inputsData[this.netplay.currentFrame].forEach((value) => { - console.log(value); if (!value.connected_input) return; + console.log(value.connected_input); this.gameManager.functions.simulateInput(value.connected_input[0], value.connected_input[1], value.connected_input[2]); }) } else if (!this.netplay.syncing) { diff --git a/data/emulator.min.js b/data/emulator.min.js index 069aa46..49cf000 100644 --- a/data/emulator.min.js +++ b/data/emulator.min.js @@ -1 +1 @@ -!function(){var e,t;e=window,t=function(){return n=[function(e,t,n){"use strict";n.r(t);function b(e,t){var n=t.x-e.x,t=t.y-e.y;return Math.sqrt(n*n+t*t)}function _(e){return e*(Math.PI/180)}function o(e){f.has(e)&&clearTimeout(f.get(e)),f.set(e,setTimeout(e,100))}function a(e,t,n){for(var i,o=t.split(/[ ,]+/g),a=0;athis.options.threshold){var r,l={};for(r in this.direction)this.direction.hasOwnProperty(r)&&(l[r]=this.direction[r]);var c={};for(r in this.direction={x:n,y:i,angle:t},e.direction=this.direction,l)l[r]===this.direction[r]&&(c[r]=!0);if(c.x&&c.y&&c.angle)return e;c.x&&c.y||this.trigger("plain",e),c.x||this.trigger("plain:"+n,e),c.y||this.trigger("plain:"+i,e),c.angle||this.trigger("dir dir:"+t,e)}else this.resetDirection();return e};var x=w;function E(e,t){this.nipples=[],this.idles=[],this.actives=[],this.ids=[],this.pressureIntervals={},this.manager=e,this.id=E.id,E.id+=1,this.defaults={zone:document.body,multitouch:!1,maxNumberOfNipples:10,mode:"dynamic",position:{top:0,left:0},catchDistance:200,size:100,threshold:.1,color:"white",fadeTime:250,dataOnly:!1,restJoystick:!0,restOpacity:.5,lockX:!1,lockY:!1,shape:"circle",dynamicPage:!1,follow:!1},this.config(t),"static"!==this.options.mode&&"semi"!==this.options.mode||(this.options.multitouch=!1),this.options.multitouch||(this.options.maxNumberOfNipples=1);e=getComputedStyle(this.options.zone.parentElement);return e&&"flex"===e.display&&(this.parentIsFlex=!0),this.updateBox(),this.prepareNipples(),this.bindings(),this.begin(),this.nipples}E.prototype=new m,(E.constructor=E).id=0,E.prototype.prepareNipples=function(){var i=this.nipples;i.on=this.on.bind(this),i.off=this.off.bind(this),i.options=this.options,i.destroy=this.destroy.bind(this),i.ids=this.ids,i.id=this.id,i.processOnMove=this.processOnMove.bind(this),i.processOnEnd=this.processOnEnd.bind(this),i.get=function(e){if(void 0===e)return i[0];for(var t=0,n=i.length;t