Fixed frontend action triggers.

This commit is contained in:
genxium 2023-01-17 12:07:41 +08:00
parent e9119530f1
commit b27b567c77
11 changed files with 6793 additions and 54 deletions

View File

@ -58,7 +58,7 @@ func toPbRoomDownsyncFrame(rdf *battle.RoomDownsyncFrame) *pb.RoomDownsyncFrame
BulletLocalId: last.BattleAttr.BulletLocalId, BulletLocalId: last.BattleAttr.BulletLocalId,
OriginatedRenderFrameId: last.BattleAttr.OriginatedRenderFrameId, OriginatedRenderFrameId: last.BattleAttr.OriginatedRenderFrameId,
OffenderJoinIndex: last.BattleAttr.OffenderJoinIndex, OffenderJoinIndex: last.BattleAttr.OffenderJoinIndex,
TeamId: last.BattleAttr.TeamId, TeamId: last.BattleAttr.TeamId,
StartupFrames: last.Bullet.StartupFrames, StartupFrames: last.Bullet.StartupFrames,
CancellableStFrame: last.Bullet.CancellableStFrame, CancellableStFrame: last.Bullet.CancellableStFrame,
@ -81,11 +81,11 @@ func toPbRoomDownsyncFrame(rdf *battle.RoomDownsyncFrame) *pb.RoomDownsyncFrame
BlowUp: last.Bullet.BlowUp, BlowUp: last.Bullet.BlowUp,
SpeciesId: last.Bullet.SpeciesId, SpeciesId: last.Bullet.SpeciesId,
ExplosionFrames: last.Bullet.ExplosionFrames, ExplosionFrames: last.Bullet.ExplosionFrames,
BlState: last.BlState, BlState: last.BlState,
FramesInBlState: last.FramesInBlState, FramesInBlState: last.FramesInBlState,
} }
ret.MeleeBullets[i] = pbBullet ret.MeleeBullets[i] = pbBullet
} }
@ -95,7 +95,7 @@ func toPbRoomDownsyncFrame(rdf *battle.RoomDownsyncFrame) *pb.RoomDownsyncFrame
BulletLocalId: last.BattleAttr.BulletLocalId, BulletLocalId: last.BattleAttr.BulletLocalId,
OriginatedRenderFrameId: last.BattleAttr.OriginatedRenderFrameId, OriginatedRenderFrameId: last.BattleAttr.OriginatedRenderFrameId,
OffenderJoinIndex: last.BattleAttr.OffenderJoinIndex, OffenderJoinIndex: last.BattleAttr.OffenderJoinIndex,
TeamId: last.BattleAttr.TeamId, TeamId: last.BattleAttr.TeamId,
StartupFrames: last.Bullet.StartupFrames, StartupFrames: last.Bullet.StartupFrames,
CancellableStFrame: last.Bullet.CancellableStFrame, CancellableStFrame: last.Bullet.CancellableStFrame,
@ -118,11 +118,11 @@ func toPbRoomDownsyncFrame(rdf *battle.RoomDownsyncFrame) *pb.RoomDownsyncFrame
BlowUp: last.Bullet.BlowUp, BlowUp: last.Bullet.BlowUp,
SpeciesId: last.Bullet.SpeciesId, SpeciesId: last.Bullet.SpeciesId,
ExplosionFrames: last.Bullet.ExplosionFrames, ExplosionFrames: last.Bullet.ExplosionFrames,
BlState: last.BlState, BlState: last.BlState,
FramesInBlState: last.FramesInBlState, FramesInBlState: last.FramesInBlState,
VirtualGridX: last.VirtualGridX, VirtualGridX: last.VirtualGridX,
VirtualGridY: last.VirtualGridY, VirtualGridY: last.VirtualGridY,

View File

@ -1342,7 +1342,7 @@ func (pR *Room) doBattleMainLoopPerTickBackendDynamicsWithProperLocking(prevRend
snapshotStFrameId = refSnapshotStFrameId snapshotStFrameId = refSnapshotStFrameId
} }
inputsBufferSnapshot := pR.produceInputsBufferSnapshotWithCurDynamicsRenderFrameAsRef(unconfirmedMask, snapshotStFrameId, pR.LastAllConfirmedInputFrameId+1) inputsBufferSnapshot := pR.produceInputsBufferSnapshotWithCurDynamicsRenderFrameAsRef(unconfirmedMask, snapshotStFrameId, pR.LastAllConfirmedInputFrameId+1)
Logger.Debug(fmt.Sprintf("[forceConfirmation] roomId=%v, room.RenderFrameId=%v, room.CurDynamicsRenderFrameId=%v, room.LastAllConfirmedInputFrameId=%v, unconfirmedMask=%v", pR.Id, pR.RenderFrameId, pR.CurDynamicsRenderFrameId, pR.LastAllConfirmedInputFrameId, unconfirmedMask)) //Logger.Warn(fmt.Sprintf("[forceConfirmation] roomId=%v, room.RenderFrameId=%v, room.CurDynamicsRenderFrameId=%v, room.LastAllConfirmedInputFrameId=%v, unconfirmedMask=%v", pR.Id, pR.RenderFrameId, pR.CurDynamicsRenderFrameId, pR.LastAllConfirmedInputFrameId, unconfirmedMask))
pR.downsyncToAllPlayers(inputsBufferSnapshot) pR.downsyncToAllPlayers(inputsBufferSnapshot)
} }
} }
@ -1457,8 +1457,8 @@ func (pR *Room) downsyncToSinglePlayer(playerId int32, player *Player, refRender
pbRefRenderFrame.SpeciesIdList = pR.SpeciesIdList pbRefRenderFrame.SpeciesIdList = pR.SpeciesIdList
pR.sendSafely(pbRefRenderFrame, toSendInputFrameDownsyncsSnapshot, DOWNSYNC_MSG_ACT_FORCED_RESYNC, playerId, false) pR.sendSafely(pbRefRenderFrame, toSendInputFrameDownsyncsSnapshot, DOWNSYNC_MSG_ACT_FORCED_RESYNC, playerId, false)
//Logger.Warn(fmt.Sprintf("Sent refRenderFrameId=%v & inputFrameIds [%d, %d), for roomId=%v, playerId=%d, playerJoinIndex=%d, renderFrameId=%d, curDynamicsRenderFrameId=%d, playerLastSentInputFrameId=%d: InputsBuffer=%v", refRenderFrameId, toSendInputFrameIdSt, toSendInputFrameIdEd, pR.Id, playerId, player.JoinIndex, pR.RenderFrameId, pR.CurDynamicsRenderFrameId, player.LastSentInputFrameId, pR.InputsBufferString(false))) //Logger.Warn(fmt.Sprintf("Sent refRenderFrameId=%v & inputFrameIds [%d, %d), for roomId=%v, playerId=%d, playerJoinIndex=%d, renderFrameId=%d, curDynamicsRenderFrameId=%d, playerLastSentInputFrameId=%d: InputsBuffer=%v", refRenderFrameId, toSendInputFrameIdSt, toSendInputFrameIdEd, pR.Id, playerId, player.JoinIndex, pR.RenderFrameId, pR.CurDynamicsRenderFrameId, player.LastSentInputFrameId, pR.InputsBufferString(false)))
if shouldResync1 { if shouldResync1 || shouldResync3 {
Logger.Warn(fmt.Sprintf("Sent refRenderFrameId=%v & inputFrameIds [%d, %d), for roomId=%v, playerId=%d, playerJoinIndex=%d, renderFrameId=%d, curDynamicsRenderFrameId=%d, playerLastSentInputFrameId=%d: shouldResync1=%v, shouldResync2=%v, shouldResync3=%v, playerBattleState=%d", refRenderFrameId, toSendInputFrameIdSt, toSendInputFrameIdEd, pR.Id, playerId, player.JoinIndex, pR.RenderFrameId, pR.CurDynamicsRenderFrameId, player.LastSentInputFrameId, shouldResync1, shouldResync2, shouldResync3, playerBattleState)) Logger.Debug(fmt.Sprintf("Sent refRenderFrameId=%v & inputFrameIds [%d, %d), for roomId=%v, playerId=%d, playerJoinIndex=%d, renderFrameId=%d, curDynamicsRenderFrameId=%d, playerLastSentInputFrameId=%d: shouldResync1=%v, shouldResync2=%v, shouldResync3=%v, playerBattleState=%d", refRenderFrameId, toSendInputFrameIdSt, toSendInputFrameIdEd, pR.Id, playerId, player.JoinIndex, pR.RenderFrameId, pR.CurDynamicsRenderFrameId, player.LastSentInputFrameId, shouldResync1, shouldResync2, shouldResync3, playerBattleState))
} }
} else { } else {
pR.sendSafely(nil, toSendInputFrameDownsyncsSnapshot, DOWNSYNC_MSG_ACT_INPUT_BATCH, playerId, false) pR.sendSafely(nil, toSendInputFrameDownsyncsSnapshot, DOWNSYNC_MSG_ACT_INPUT_BATCH, playerId, false)

File diff suppressed because one or more lines are too long

View File

@ -3,7 +3,7 @@
"_name": "Fireball1Explosion", "_name": "Fireball1Explosion",
"_objFlags": 0, "_objFlags": 0,
"_native": "", "_native": "",
"_duration": 0.1, "_duration": 0.26666666666666666,
"sample": 60, "sample": 60,
"speed": 1, "speed": 1,
"wrapMode": 1, "wrapMode": 1,
@ -18,31 +18,31 @@
} }
}, },
{ {
"frame": 0.016666666666666666, "frame": 0.05,
"value": { "value": {
"__uuid__": "c6a5994f-251d-4191-a550-dfef979bab59" "__uuid__": "c6a5994f-251d-4191-a550-dfef979bab59"
} }
}, },
{ {
"frame": 0.03333333333333333, "frame": 0.11666666666666667,
"value": { "value": {
"__uuid__": "417e58d9-e364-47f7-9364-f31ad3452adc" "__uuid__": "417e58d9-e364-47f7-9364-f31ad3452adc"
} }
}, },
{ {
"frame": 0.05, "frame": 0.15,
"value": { "value": {
"__uuid__": "8b566f26-b34d-4da6-bdaa-078358a5b685" "__uuid__": "8b566f26-b34d-4da6-bdaa-078358a5b685"
} }
}, },
{ {
"frame": 0.06666666666666667, "frame": 0.2,
"value": { "value": {
"__uuid__": "6ec5f75d-307e-4292-b667-cbbb5a52c2f6" "__uuid__": "6ec5f75d-307e-4292-b667-cbbb5a52c2f6"
} }
}, },
{ {
"frame": 0.08333333333333333, "frame": 0.25,
"value": { "value": {
"__uuid__": "d89977f1-d927-4a08-9591-9feb1daf68c8" "__uuid__": "d89977f1-d927-4a08-9591-9feb1daf68c8"
} }

View File

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

View File

@ -464,7 +464,7 @@
"array": [ "array": [
0, 0,
0, 0,
210.4441731196186, 216.50635094610968,
0, 0,
0, 0,
0, 0,

View File

@ -134,7 +134,7 @@ cc.Class({
previousSelfInput = (null == previousInputFrameDownsync ? null : previousInputFrameDownsync.InputList[joinIndex - 1]); previousSelfInput = (null == previousInputFrameDownsync ? null : previousInputFrameDownsync.InputList[joinIndex - 1]);
if (null != existingInputFrame) { if (null != existingInputFrame) {
// This could happen upon either [type#1] or [type#2] forceConfirmation, where "refRenderFrame" is accompanied by some "inputFrameDownsyncs". The check here also guarantees that we don't override history // This could happen upon either [type#1] or [type#2] forceConfirmation, where "refRenderFrame" is accompanied by some "inputFrameDownsyncs". The check here also guarantees that we don't override history
console.log(`noDelayInputFrameId=${inputFrameId} already exists in recentInputCache: recentInputCache=${self._stringifyRecentInputCache(false)}`); //console.log(`noDelayInputFrameId=${inputFrameId} already exists in recentInputCache: recentInputCache=${self._stringifyRecentInputCache(false)}`);
return [previousSelfInput, existingInputFrame.InputList[joinIndex - 1]]; return [previousSelfInput, existingInputFrame.InputList[joinIndex - 1]];
} }
@ -152,6 +152,7 @@ cc.Class({
prefabbedInputList[k] = (prefabbedInputList[k] & 15); prefabbedInputList[k] = (prefabbedInputList[k] & 15);
} }
currSelfInput = self.ctrl.getEncodedInput(); // When "null == existingInputFrame", it'd be safe to say that the realtime "self.ctrl.getEncodedInput()" is for the requested "inputFrameId" currSelfInput = self.ctrl.getEncodedInput(); // When "null == existingInputFrame", it'd be safe to say that the realtime "self.ctrl.getEncodedInput()" is for the requested "inputFrameId"
//console.log(`@rdf.Id=${self.renderFrameId}, currSelfInput=${currSelfInput}`);
prefabbedInputList[(joinIndex - 1)] = currSelfInput; prefabbedInputList[(joinIndex - 1)] = currSelfInput;
while (self.recentInputCache.EdFrameId <= inputFrameId) { while (self.recentInputCache.EdFrameId <= inputFrameId) {
// Fill the gap // Fill the gap
@ -916,12 +917,8 @@ batchInputFrameIdRange=[${batch[0].inputFrameId}, ${batch[batch.length - 1].inpu
} }
try { try {
let st = performance.now(); let st = performance.now();
let prevSelfInput = null,
currSelfInput = null;
const noDelayInputFrameId = gopkgs.ConvertToNoDelayInputFrameId(self.renderFrameId); const noDelayInputFrameId = gopkgs.ConvertToNoDelayInputFrameId(self.renderFrameId);
if (gopkgs.ShouldGenerateInputFrameUpsync(self.renderFrameId)) { const [prevSelfInput, currSelfInput] = self.getOrPrefabInputFrameUpsync(noDelayInputFrameId);
[prevSelfInput, currSelfInput] = self.getOrPrefabInputFrameUpsync(noDelayInputFrameId);
}
let t0 = performance.now(); let t0 = performance.now();
if (self.shouldSendInputFrameUpsyncBatch(prevSelfInput, currSelfInput, self.lastUpsyncInputFrameId, noDelayInputFrameId)) { if (self.shouldSendInputFrameUpsyncBatch(prevSelfInput, currSelfInput, self.lastUpsyncInputFrameId, noDelayInputFrameId)) {

View File

@ -94,7 +94,7 @@ cc.Class({
const p2Vpos = gopkgs.WorldToVirtualGridPos(boundaryObjs.playerStartingPositions[1].x, boundaryObjs.playerStartingPositions[1].y); const p2Vpos = gopkgs.WorldToVirtualGridPos(boundaryObjs.playerStartingPositions[1].x, boundaryObjs.playerStartingPositions[1].y);
const colliderRadiusV = gopkgs.WorldToVirtualGridPos(12.0, 0); const colliderRadiusV = gopkgs.WorldToVirtualGridPos(12.0, 0);
const speciesIdList = [1, 4096]; const speciesIdList = [4096, 1];
const chConfigsOrderedByJoinIndex = gopkgs.GetCharacterConfigsOrderedByJoinIndex(speciesIdList); const chConfigsOrderedByJoinIndex = gopkgs.GetCharacterConfigsOrderedByJoinIndex(speciesIdList);
const startRdf = window.pb.protos.RoomDownsyncFrame.create({ const startRdf = window.pb.protos.RoomDownsyncFrame.create({

View File

@ -108,7 +108,9 @@ cc.Class({
this.cachedBtnRightLevel = 0; this.cachedBtnRightLevel = 0;
this.cachedBtnALevel = 0; this.cachedBtnALevel = 0;
this.btnAEdgeTriggerLock = false;
this.cachedBtnBLevel = 0; this.cachedBtnBLevel = 0;
this.btnBEdgeTriggerLock = false;
this.canvasNode = this.mapNode.parent; this.canvasNode = this.mapNode.parent;
this.mainCameraNode = this.canvasNode.getChildByName("Main Camera"); // Cannot drag and assign the `mainCameraNode` from CocosCreator EDITOR directly, otherwise it'll cause an infinite loading time, till v2.1.0. this.mainCameraNode = this.canvasNode.getChildByName("Main Camera"); // Cannot drag and assign the `mainCameraNode` from CocosCreator EDITOR directly, otherwise it'll cause an infinite loading time, till v2.1.0.
@ -164,30 +166,30 @@ cc.Class({
if (self.btnA) { if (self.btnA) {
self.btnA.on(cc.Node.EventType.TOUCH_START, function(evt) { self.btnA.on(cc.Node.EventType.TOUCH_START, function(evt) {
self.cachedBtnALevel = 1; self._triggerEdgeBtnA(true);
evt.target.runAction(cc.scaleTo(0.1, 0.3)); evt.target.runAction(cc.scaleTo(0.1, 0.3));
}); });
self.btnA.on(cc.Node.EventType.TOUCH_END, function(evt) { self.btnA.on(cc.Node.EventType.TOUCH_END, function(evt) {
//self.cachedBtnALevel = 0; self._triggerEdgeBtnA(false);
evt.target.runAction(cc.scaleTo(0.1, 1.0)); evt.target.runAction(cc.scaleTo(0.1, 1.0));
}); });
self.btnA.on(cc.Node.EventType.TOUCH_CANCEL, function(evt) { self.btnA.on(cc.Node.EventType.TOUCH_CANCEL, function(evt) {
//self.cachedBtnALevel = 0; self._triggerEdgeBtnA(false);
evt.target.runAction(cc.scaleTo(0.1, 1.0)); evt.target.runAction(cc.scaleTo(0.1, 1.0));
}); });
} }
if (self.btnB) { if (self.btnB) {
self.btnB.on(cc.Node.EventType.TOUCH_START, function(evt) { self.btnB.on(cc.Node.EventType.TOUCH_START, function(evt) {
self.cachedBtnBLevel = 1; self._triggerEdgeBtnB(true);
evt.target.runAction(cc.scaleTo(0.1, 0.3)); evt.target.runAction(cc.scaleTo(0.1, 0.3));
}); });
self.btnB.on(cc.Node.EventType.TOUCH_END, function(evt) { self.btnB.on(cc.Node.EventType.TOUCH_END, function(evt) {
//self.cachedBtnBLevel = 0; self._triggerEdgeBtnB(false);
evt.target.runAction(cc.scaleTo(0.1, 1.0)); evt.target.runAction(cc.scaleTo(0.1, 1.0));
}); });
self.btnB.on(cc.Node.EventType.TOUCH_CANCEL, function(evt) { self.btnB.on(cc.Node.EventType.TOUCH_CANCEL, function(evt) {
//self.cachedBtnBLevel = 0; self._triggerEdgeBtnB(false);
evt.target.runAction(cc.scaleTo(0.1, 1.0)); evt.target.runAction(cc.scaleTo(0.1, 1.0));
}); });
} }
@ -224,10 +226,10 @@ cc.Class({
self.cachedBtnRightLevel = 1; self.cachedBtnRightLevel = 1;
break; break;
case cc.macro.KEY.h: case cc.macro.KEY.h:
self.cachedBtnALevel = 1; self._triggerEdgeBtnA(true);
break; break;
case cc.macro.KEY.j: case cc.macro.KEY.j:
self.cachedBtnBLevel = 1; self._triggerEdgeBtnB(true);
break; break;
default: default:
break; break;
@ -248,14 +250,12 @@ cc.Class({
case cc.macro.KEY.d: case cc.macro.KEY.d:
self.cachedBtnRightLevel = 0; self.cachedBtnRightLevel = 0;
break; break;
/*
case cc.macro.KEY.h: case cc.macro.KEY.h:
self.cachedBtnALevel = 0; self._triggerEdgeBtnA(false);
break; break;
case cc.macro.KEY.j: case cc.macro.KEY.j:
self.cachedBtnBLevel = 0; self._triggerEdgeBtnB(false);
break; break;
*/
default: default:
break; break;
} }
@ -468,8 +468,8 @@ cc.Class({
const btnALevel = (this.cachedBtnALevel << 4); const btnALevel = (this.cachedBtnALevel << 4);
const btnBLevel = (this.cachedBtnBLevel << 5); const btnBLevel = (this.cachedBtnBLevel << 5);
this.cachedBtnALevel = 0; this.btnAEdgeTriggerLock = false;
this.cachedBtnBLevel = 0; this.btnBEdgeTriggerLock = false;
return (btnBLevel + btnALevel + discretizedDir); return (btnBLevel + btnALevel + discretizedDir);
}, },
@ -488,4 +488,18 @@ cc.Class({
btnBLevel: btnBLevel, btnBLevel: btnBLevel,
}); });
}, },
_triggerEdgeBtnA(rising) {
if (!this.btnAEdgeTriggerLock && (rising ? 0 : 1) == this.cachedBtnALevel) {
this.cachedBtnALevel = (rising ? 1 : 0);
this.btnAEdgeTriggerLock = true;
}
},
_triggerEdgeBtnB(rising) {
if (!this.btnBEdgeTriggerLock && (rising ? 0 : 1) == this.cachedBtnBLevel) {
this.cachedBtnBLevel = (rising ? 1 : 0);
this.btnBEdgeTriggerLock = true;
}
},
}); });

View File

@ -68,7 +68,7 @@
"shelter_z_reducer", "shelter_z_reducer",
"shelter" "shelter"
], ],
"last-module-event-record-time": 1673325961305, "last-module-event-record-time": 1673930863015,
"simulator-orientation": false, "simulator-orientation": false,
"simulator-resolution": { "simulator-resolution": {
"height": 640, "height": 640,

View File

@ -302,7 +302,7 @@ var skills = map[int]*Skill{
HitboxOffsetY: int32(0), HitboxOffsetY: int32(0),
HitboxSizeX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxSizeX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
CancellableStFrame: int32(13), CancellableStFrame: int32(8),
CancellableEdFrame: int32(30), CancellableEdFrame: int32(30),
CancelTransit: map[int]int{ CancelTransit: map[int]int{
@ -337,7 +337,7 @@ var skills = map[int]*Skill{
HitboxOffsetY: int32(0), HitboxOffsetY: int32(0),
HitboxSizeX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxSizeX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
CancellableStFrame: int32(22), CancellableStFrame: int32(19),
CancellableEdFrame: int32(36), CancellableEdFrame: int32(36),
CancelTransit: map[int]int{ CancelTransit: map[int]int{
1: 6, 1: 6,
@ -500,7 +500,7 @@ var skills = map[int]*Skill{
HitboxSizeX: int32(float64(48) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxSizeX: int32(float64(48) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
BlowUp: false, BlowUp: false,
ExplosionFrames: 5, ExplosionFrames: 15,
SpeciesId: int32(1), SpeciesId: int32(1),
}, },
}, },