Simplified frontend handling of RoomDownsyncFrame.

This commit is contained in:
genxium 2022-11-25 13:24:03 +08:00
parent c58e690a47
commit 70e552f5f0
4 changed files with 33 additions and 28 deletions

View File

@ -440,7 +440,7 @@
"array": [ "array": [
0, 0,
0, 0,
216.50635094610968, 210.7364624020594,
0, 0,
0, 0,
0, 0,

View File

@ -454,7 +454,7 @@
"array": [ "array": [
0, 0,
0, 0,
216.50635094610968, 210.7364624020594,
0, 0,
0, 0,
0, 0,

View File

@ -106,7 +106,7 @@ cc.Class({
dumpToRenderCache: function(rdf) { dumpToRenderCache: function(rdf) {
const self = this; const self = this;
const minToKeepRenderFrameId = self.lastAllConfirmedRenderFrameId; const minToKeepRenderFrameId = self.lastAllConfirmedRenderFrameId - 1; // Keep at least 1 prev render frame for anim triggering
while (0 < self.recentRenderCache.cnt && self.recentRenderCache.stFrameId < minToKeepRenderFrameId) { while (0 < self.recentRenderCache.cnt && self.recentRenderCache.stFrameId < minToKeepRenderFrameId) {
self.recentRenderCache.pop(); self.recentRenderCache.pop();
} }
@ -537,7 +537,7 @@ cc.Class({
window.initPersistentSessionClient(self.initAfterWSConnected, boundRoomId); window.initPersistentSessionClient(self.initAfterWSConnected, boundRoomId);
} else { } else {
self.showPopupInCanvas(self.gameRuleNode); self.showPopupInCanvas(self.gameRuleNode);
// Deliberately left blank. -- YFLu // Deliberately left blank. -- YFLu
} }
}, },
@ -610,28 +610,32 @@ cc.Class({
} }
} }
self.renderFrameId = rdf.id; if (null == self.renderFrameId || self.renderFrameId <= rdf.id) {
self.lastRenderFrameIdTriggeredAt = performance.now(); // In fact, not having "window.RING_BUFF_CONSECUTIVE_SET == dumpRenderCacheRet" should already imply that "self.renderFrameId <= rdf.id", but here we double check and log the anomaly
// In this case it must be true that "rdf.id > chaserRenderFrameId >= lastAllConfirmedRenderFrameId". self.renderFrameId = rdf.id;
self.lastAllConfirmedRenderFrameId = rdf.id; self.lastRenderFrameIdTriggeredAt = performance.now();
self.chaserRenderFrameId = rdf.id; // In this case it must be true that "rdf.id > chaserRenderFrameId >= lastAllConfirmedRenderFrameId".
self.lastAllConfirmedRenderFrameId = rdf.id;
self.chaserRenderFrameId = rdf.id;
if (null != rdf.countdownNanos) { const canvasNode = self.canvasNode;
self.countdownNanos = rdf.countdownNanos; self.ctrl = canvasNode.getComponent("TouchEventsManager");
} self.enableInputControls();
if (null != self.musicEffectManagerScriptIns) { self.transitToState(ALL_MAP_STATES.VISUAL);
self.musicEffectManagerScriptIns.playBGM(); self.battleState = ALL_BATTLE_STATES.IN_BATTLE;
}
const canvasNode = self.canvasNode;
self.ctrl = canvasNode.getComponent("TouchEventsManager");
self.enableInputControls();
if (self.countdownToBeginGameNode && self.countdownToBeginGameNode.parent) {
self.countdownToBeginGameNode.parent.removeChild(self.countdownToBeginGameNode);
}
self.transitToState(ALL_MAP_STATES.VISUAL);
self.battleState = ALL_BATTLE_STATES.IN_BATTLE;
self.applyRoomDownsyncFrameDynamics(rdf, self.recentRenderCache.getByFrameId(rdf.id - 1));
if (self.countdownToBeginGameNode && self.countdownToBeginGameNode.parent) {
self.countdownToBeginGameNode.parent.removeChild(self.countdownToBeginGameNode);
}
if (null != self.musicEffectManagerScriptIns) {
self.musicEffectManagerScriptIns.playBGM();
}
} else {
console.warn(`Anomaly when onRoomDownsyncFrame is called by rdf=${JSON.stringify(rdf)}`);
}
// [WARNING] Leave all graphical updates in "update(dt)" by "applyRoomDownsyncFrameDynamics"
return dumpRenderCacheRet; return dumpRenderCacheRet;
}, },
@ -1050,12 +1054,13 @@ cc.Class({
const [offenderWx, offenderWy] = self.virtualGridToWorldPos(offender.virtualGridX, offender.virtualGridY); const [offenderWx, offenderWy] = self.virtualGridToWorldPos(offender.virtualGridX, offender.virtualGridY);
const bulletWx = offenderWx + xfac * meleeBullet.hitboxOffset; const bulletWx = offenderWx + xfac * meleeBullet.hitboxOffset;
const bulletWy = offenderWy; const bulletWy = offenderWy;
const [bulletCx, bulletCy] = self.worldToPolygonColliderAnchorPos(bulletWx, bulletWy, meleeBullet.hitboxSize.x * 0.5, meleeBullet.hitboxSize.y * 0.5), pts = [[0, 0], [meleeBullet.hitboxSize.x, 0], [meleeBullet.hitboxSize.x, meleeBullet.hitboxSize.y], [0, meleeBullet.hitboxSize.y]]; const [bulletCx, bulletCy] = self.worldToPolygonColliderAnchorPos(bulletWx, bulletWy, meleeBullet.hitboxSize.x * 0.5, meleeBullet.hitboxSize.y * 0.5),
pts = [[0, 0], [meleeBullet.hitboxSize.x, 0], [meleeBullet.hitboxSize.x, meleeBullet.hitboxSize.y], [0, meleeBullet.hitboxSize.y]];
const newBulletCollider = collisionSys.createPolygon(bulletCx, bulletCy, pts); const newBulletCollider = collisionSys.createPolygon(bulletCx, bulletCy, pts);
newBulletCollider.data = meleeBullet; newBulletCollider.data = meleeBullet;
collisionSysMap.set(collisionBulletIndex, newBulletCollider); collisionSysMap.set(collisionBulletIndex, newBulletCollider);
bulletColliders.set(collisionBulletIndex, newBulletCollider); bulletColliders.set(collisionBulletIndex, newBulletCollider);
// console.log(`A meleeBullet is added to collisionSys at currRenderFrame.id=${currRenderFrame.id} as start-up frames ended and active frame is not yet ended: ${JSON.stringify(meleeBullet)}`); // console.log(`A meleeBullet is added to collisionSys at currRenderFrame.id=${currRenderFrame.id} as start-up frames ended and active frame is not yet ended: ${JSON.stringify(meleeBullet)}`);
} }
} }

View File

@ -132,7 +132,7 @@ cc.Class({
self.collisionSysMap.set(collisionBarrierIndex, newBarrier); self.collisionSysMap.set(collisionBarrierIndex, newBarrier);
} }
const startRdf = { const startRdf = window.pb.protos.RoomDownsyncFrame.create({
id: window.MAGIC_ROOM_DOWNSYNC_FRAME_ID.BATTLE_START, id: window.MAGIC_ROOM_DOWNSYNC_FRAME_ID.BATTLE_START,
players: { players: {
10: { 10: {
@ -160,7 +160,7 @@ cc.Class({
dirY: 0, dirY: 0,
}, },
} }
}; });
self.selfPlayerInfo = { self.selfPlayerInfo = {
id: 10 id: 10
}; };