refactor: hmr
This commit is contained in:
parent
39e7082a28
commit
512c5a470a
|
@ -58,6 +58,7 @@ export default function PlaySpecific() {
|
||||||
markChange() {}
|
markChange() {}
|
||||||
}
|
}
|
||||||
ecsRef.current = new ClientEcsPerf({Components, Systems});
|
ecsRef.current = new ClientEcsPerf({Components, Systems});
|
||||||
|
mainEntityRef.current = undefined;
|
||||||
}, [ecsRef, Components, Systems]);
|
}, [ecsRef, Components, Systems]);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
async function setEcsStuff() {
|
async function setEcsStuff() {
|
||||||
|
@ -67,7 +68,7 @@ export default function PlaySpecific() {
|
||||||
setSystems(Systems);
|
setSystems(Systems);
|
||||||
}
|
}
|
||||||
setEcsStuff();
|
setEcsStuff();
|
||||||
}, []);
|
});
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
refreshEcs();
|
refreshEcs();
|
||||||
}, [refreshEcs]);
|
}, [refreshEcs]);
|
||||||
|
@ -90,6 +91,7 @@ export default function PlaySpecific() {
|
||||||
function onConnectionStatus(status) {
|
function onConnectionStatus(status) {
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case 'aborted': {
|
case 'aborted': {
|
||||||
|
client.disconnect();
|
||||||
setDisconnected(true);
|
setDisconnected(true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -127,15 +129,10 @@ export default function PlaySpecific() {
|
||||||
if (!client || !disconnected) {
|
if (!client || !disconnected) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mainEntityRef.current = undefined;
|
|
||||||
async function reconnect() {
|
async function reconnect() {
|
||||||
await client.connect(url);
|
await client.connect(url);
|
||||||
}
|
}
|
||||||
reconnect();
|
reconnect();
|
||||||
const handle = setInterval(reconnect, 1000);
|
|
||||||
return () => {
|
|
||||||
clearInterval(handle);
|
|
||||||
};
|
|
||||||
}, [client, disconnected, mainEntityRef, url]);
|
}, [client, disconnected, mainEntityRef, url]);
|
||||||
// useEffect(() => {
|
// useEffect(() => {
|
||||||
// let source = true;
|
// let source = true;
|
||||||
|
|
|
@ -130,6 +130,9 @@ export default class Engine {
|
||||||
});
|
});
|
||||||
this.server.addPacketListener('Heartbeat', (connection) => {
|
this.server.addPacketListener('Heartbeat', (connection) => {
|
||||||
const playerData = this.connectedPlayers.get(connection);
|
const playerData = this.connectedPlayers.get(connection);
|
||||||
|
if (!playerData) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
const {distance} = playerData;
|
const {distance} = playerData;
|
||||||
const now = performance.now();
|
const now = performance.now();
|
||||||
distance.rtt = (now - distance.last) / 1000;
|
distance.rtt = (now - distance.last) / 1000;
|
||||||
|
|
|
@ -68,7 +68,19 @@ onmessage = async (event) => {
|
||||||
if (import.meta.hot) {
|
if (import.meta.hot) {
|
||||||
const before = withResolvers();
|
const before = withResolvers();
|
||||||
const promises = [before.promise];
|
const promises = [before.promise];
|
||||||
import.meta.hot.on('vite:beforeUpdate', async () => {
|
const accepted = [
|
||||||
|
'/app/server/engine.js',
|
||||||
|
'/app/server/create/player.js',
|
||||||
|
'/app/server/create/forest.js',
|
||||||
|
'/app/server/create/town.js',
|
||||||
|
'/app/server/create/homestead.js',
|
||||||
|
];
|
||||||
|
let isAccepted = false;
|
||||||
|
import.meta.hot.on('vite:beforeUpdate', async ({updates}) => {
|
||||||
|
isAccepted = !!updates.find(({acceptedPath}) => accepted.includes(acceptedPath));
|
||||||
|
if (!isAccepted) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
await engine.disconnectPlayer(0);
|
await engine.disconnectPlayer(0);
|
||||||
engine.stop();
|
engine.stop();
|
||||||
await engine.saveEcses();
|
await engine.saveEcses();
|
||||||
|
@ -128,8 +140,12 @@ import.meta.hot.accept('./create/town.js', async ({default: createTown}) => {
|
||||||
resolve();
|
resolve();
|
||||||
});
|
});
|
||||||
import.meta.hot.on('vite:afterUpdate', async () => {
|
import.meta.hot.on('vite:afterUpdate', async () => {
|
||||||
|
if (!isAccepted) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
await Promise.all(promises);
|
await Promise.all(promises);
|
||||||
postMessage(encode({type: 'ConnectionStatus', payload: 'aborted'}));
|
postMessage(encode({type: 'ConnectionStatus', payload: 'aborted'}));
|
||||||
|
postMessage(encode({type: 'EcsChange'}));
|
||||||
close();
|
close();
|
||||||
});
|
});
|
||||||
import.meta.hot.accept();
|
import.meta.hot.accept();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user