protected override ServerFrameMsg createServerFrameMsg() { ServerFrameMsg serverEvent = new ServerFrameMsg(); serverEvent.frameNum = serverCurrentFrameNum; events.Clear(); List <ClientFrameMsg> clientMsgs = InputEventTranslator.instance.translateInputToEvent(); if (clientMsgs != null) { for (int i = 0; i < clientMsgs.Count; ++i) { ServerFrameInputEvent sie = new ServerFrameInputEvent(); sie.angle = clientMsgs[i].angle; sie.keys[0] = clientMsgs[i].keys[0]; sie.keys[1] = clientMsgs[i].keys[1]; sie.objectID = 1; events.Add(sie); } } serverEvent.events = events; ++serverCurrentFrameNum; return(serverEvent); }
public void runLogic(float time) { // for (int i = 0; i < logicUpdators.Count; ++i) { logicUpdators[i].preUpdate(); } ServerFrameMsg currentFrameInputEvent = popFrameInputEvent(); if (frameSyncEventHandler != null) { for (int i = 0; i < currentFrameInputEvent.events.Count; ++i) { ServerFrameInputEvent playerInputEvent = currentFrameInputEvent.events[i]; frameSyncEventHandler.handleFrameInputEvent(playerInputEvent); } } //Debuger.Log("current frame num " + currentFrameInputEvent.frameNum); //丢帧???? if (currentFrameInputEvent.frameNum != 0 && currentFrameInputEvent.frameNum != (currentLogicFrameNum + 1)) { Debuger.LogError("!!!!!!!!!!!!!!!!LostFrame: " + (currentLogicFrameNum + 1) + " ,currentFrameNum " + currentFrameInputEvent.frameNum); } currentLogicFrameNum = currentFrameInputEvent.frameNum; for (int i = 0; i < logicUpdators.Count; ++i) { logicUpdators[i].update(time); } }
protected virtual ServerFrameMsg createServerFrameMsg() { ServerFrameMsg serverEvent = new ServerFrameMsg(); serverEvent.frameNum = serverCurrentFrameNum; ++serverCurrentFrameNum; return(serverEvent); }
//更新一帧 public void updateFrame(ServerFrameMsg cmd, float time) { if (frameSync == null) { return; } frameSync.pushFrameInputEvent(cmd); frameSync.udpateFrame(time); }
ServerFrameMsg popServerMessage() { if (serverMessages.Count == 0) { return(null); } ServerFrameMsg msg = serverMessages.First.Value; serverMessages.RemoveFirst(); return(msg); }
public ServerFrameMsg popFrameInputEvent() { if (serverFrameInputEventList.Count == 0) { return(null); } ServerFrameMsg fie = serverFrameInputEventList[0]; serverFrameInputEventList.RemoveAt(0); return(fie); }
public override bool unMarshal(BytesStream stream) { var frameCount = stream.ReadUInt16(); while (stream.Pos < stream.Buf.Length - 1 && allFrameMessages.Count < frameCount) { ServerFrameMsg evt = new ServerFrameMsg(); evt.unMarshal(stream); allFrameMessages.Add(evt); } return(true); }
public void onServerFrameMsg(ServerFrameMsg cmd) { if (!Game.instance.fbGame.frameSync.frameSyncStarted) { Game.instance.fbGame.frameSync.start(); } if (Game.instance.fbGame.frameSyncUpdater.thisType != FrameSyncUpdater.type) { return; } Game.instance.fbGame.frameSyncUpdater.updateFrame(cmd, UnityEngine.Time.realtimeSinceStartup); #if FRAME_RECORDING if (FrameRecording.instance != null) { FrameRecording.instance.pushServerMessage(cmd); } #endif }
public void run() { if (_stopped) { return; } var frameSyncTime = Time.unscaledTime - frameSyncTimeOrigin; var currentFrameNum = (int)(frameSyncTime * 15); for (int i = lastFrameNum; i < currentFrameNum; ++i) { ServerFrameMsg serverFrameMsg = createServerFrameMsg(); //updateFrame(serverFrameMsg,Game.instance.logicFrameQueue.nextFrameId / (float)FrameSync.LOGIC_FPS); updateFrame(serverFrameMsg, Time.realtimeSinceStartup); } var d = currentFrameNum - lastFrameNum; count += d; lastFrameNum = currentFrameNum; }
IEnumerator simulateServerMessage() { fbGame.debugLogicStart(); while (true) { for (int i = 0; i < (int)PlaySpeed; ++i) { ServerFrameMsg serverMsg = popServerMessage(); if (serverMsg == null) { yield break; } fbGame.frameSync.pushFrameInputEvent(serverMsg); fbGame.frameSync.udpateFrame(Time.unscaledTime); fbGame.debugFrameLogic(); } yield return(new WaitForSeconds((float)FrameSync.LOGIC_UPDATE_TIME)); } }
public void updateFrame(ServerFrameMsg cmd, float time) { frameUpdator.updateFrame(cmd, time); }
//插入一个帧输入事件,从网络层收到的帧同步消息通过该接口插入到列表中去 public void pushFrameInputEvent(ServerFrameMsg fie) { serverFrameInputEventList.Add(fie); }
public void process(byte[] msg) { if (InstanceManager.instance.playerManager.myPlayerInfo == null) { return; } if (!InstanceManager.instance.playerManager.myPlayerInfo.isEnterBattleScene) { return; } if (!SceneUtil.InBattleScene()) { return; } string str = System.Text.Encoding.Default.GetString(msg); ServerFrameMsg serverFrame = InstanceManager.instance.jsonManager.Deserialize <ServerFrameMsg>(str); // Debug.Log(" receieve serverFrame ...... " + serverFrame.playerFrameMsgs.Count); foreach (PlayerFrameMsg playerFrameMsg in serverFrame.playerFrameMsgs) { if (playerFrameMsg.playerId == InstanceManager.instance.playerManager.myPlayerInfo.id) { continue; } PlayerInfo playerInfo = InstanceManager.instance.playerManager.GetPlayerInfo(playerFrameMsg.playerId); if (playerInfo == null) { GameObject gameObject = GameObject.Instantiate(InstanceManager.instance.prefabManager.enemyPrefab); gameObject.SetActive(true); playerInfo = new PlayerInfo(); playerInfo.id = playerFrameMsg.playerId; playerInfo.gameObject = gameObject; gameObject.name = "Enemy_" + playerFrameMsg.name; InstanceManager.instance.playerManager.PutPlayerInfo(playerInfo); Debug.Log(" create enemy "); } if (playerInfo.bullet == null) { playerInfo.bullet = GameObject.Instantiate(InstanceManager.instance.prefabManager.enemyBulletPrefab); } if (playerFrameMsg.bulletPosi != null) { playerInfo.bullet.transform.position = new Vector3(playerFrameMsg.bulletPosi.x, playerFrameMsg.bulletPosi.y, 0); } if (playerFrameMsg.bulletActive) { playerInfo.bullet.SetActive(true); } else { playerInfo.bullet.SetActive(false); } playerInfo.gameObject.GetComponent <Transform>().position = new Vector3(playerFrameMsg.posi.x, playerFrameMsg.posi.y, 0); } }
public void pushServerMessage(ServerFrameMsg cmd) { serverMessages.AddLast(cmd); }