private bool PlayKeyFrame() { if (_lockStepKeyFrameDataList.Count == 0) { // 数据还未接收完毕,继续等待 return(false); } LockStepKeyFrameData lockStepKeyFrameData = _lockStepKeyFrameDataList.Values[0]; if (lockStepKeyFrameData.KeyFrame == _clientFrame) { foreach (LockStepClientMsgItem LockStepClientMsgItem in lockStepKeyFrameData.ReceiveMsgList) { if (LockStepClientMsgItem.msgId == MsgID.SteerPositionRsp) { SteerPositionRsp resp = (SteerPositionRsp)LockStepClientMsgItem.msg; GameEntity entity = _context.CreateEntity(); entity.AddPlayerId(resp.PlayerId); entity.AddSteerPosition(new Vector2(resp.X, resp.Y)); Log4U.LogDebug("LockStepClientMgr:FixedUpdate _clientFrame=", _clientFrame, " resp=", resp.ToString()); } } _lockStepKeyFrameDataList.RemoveAt(0); _nearstServerKeyFrame = _clientFrame + Config.SYN_RATE_SERVER; _gameController.Execute(); _clientFrame++; } return(true); }
private void OnSteerPositionRsp(IMessage msg, object ext) { SteerPositionRsp steerPositionRsp = (SteerPositionRsp)msg; int serverKeyFrame = steerPositionRsp.KeyFrame; LockStepClientMsgItem lockStepClientMsgItem = new LockStepClientMsgItem(MsgID.SteerPositionRsp, msg); LockStepKeyFrameData lockStepKeyFrameData; if (_lockStepKeyFrameDataList.ContainsKey(serverKeyFrame)) { lockStepKeyFrameData = _lockStepKeyFrameDataList[serverKeyFrame]; } else { lockStepKeyFrameData = new LockStepKeyFrameData(serverKeyFrame); _lockStepKeyFrameDataList.Add(serverKeyFrame, lockStepKeyFrameData); } lockStepKeyFrameData.AddLockStepClientMsgItem(lockStepClientMsgItem); }
private void OnLockStepEnd(IMessage msg, object ext) { LockStepEnd rsp = (LockStepEnd)msg; int serverKeyFrame = rsp.KeyFrame; _serverKeyFrame = Math.Max(_serverKeyFrame, serverKeyFrame); int msgTotal = rsp.MsgTotal; LockStepKeyFrameData lockStepKeyFrameData; if (_lockStepKeyFrameDataList.ContainsKey(serverKeyFrame)) { lockStepKeyFrameData = _lockStepKeyFrameDataList[serverKeyFrame]; } else { lockStepKeyFrameData = new LockStepKeyFrameData(serverKeyFrame); _lockStepKeyFrameDataList.Add(serverKeyFrame, lockStepKeyFrameData); } lockStepKeyFrameData.SetMsgTotal(msgTotal); }