//取下一帧执行 public FrameInfo NextTurn() { if (headIdx == -1) { return(null); } FrameInfo turn = null; turn = turnQ[headIdx]; if (turn == null) { if (tailIdx > headIdx) //缺帧,请求重发。否则只是新的帧还未到 { GameMsgSender.SendMissTurnReq((uint)curExecTurnID + 1); } } else { if (turn.frameNum != curExecTurnID + 1) { Debug.LogError("turn.frameNum != curExecTurnID + 1, Impossible!"); } turnQ[headIdx] = null; headIdx = WrapIncIndex(headIdx, 1); curExecTurnID = (int)turn.frameNum; } return(turn); }
public void ReadInput() { float hori = Input.GetAxis("Horizontal"); float vert = Input.GetAxis("Vertical"); Direction dir = ConvertToDirection(hori, vert); Command cmd = Command.None; if (Input.GetKey(KeyCode.J)) { cmd = Command.Action1; } else if (Input.GetKey(KeyCode.K)) { cmd = Command.Action2; } else if (Input.GetKey(KeyCode.L)) { cmd = Command.Action3; } if (curCmd != cmd || curDir != dir) { //Logger.Log("SendInput " + dir + " " + cmd); GameMsgSender.SendInput(dir, cmd); } curCmd = cmd; curDir = dir; }
void SendClientEndGame1Plus() { TeamMatchData matchData = new TeamMatchData(); matchData.acc_id = MainPlayer.Instance.AccountID; PlayerMatchData homeData = new PlayerMatchData(); homeData.acc_id = m_match.m_homeTeam.GetMember(0).m_roleInfo.acc_id; homeData.exit_type = ExitMatchType.EMT_END; matchData.player_data.Add(homeData); foreach (Player player in m_match.m_homeTeam) { matchData.role_data.Add(player.mStatistics.data); } PlayerMatchData awayData = new PlayerMatchData(); awayData.acc_id = m_match.m_awayTeam.GetMember(0).m_roleInfo.acc_id; awayData.exit_type = ExitMatchType.EMT_END; matchData.player_data.Add(awayData); foreach (Player player in m_match.m_awayTeam) { matchData.role_data.Add(player.mStatistics.data); } GameMsgSender.SendTeamMatchData(matchData); }
public void SendTurnCheckData() { CheckFrame turnData = new CheckFrame(); turnData.frameNum = (uint)curExecTurnID; foreach (Player player in GameSystem.Instance.mClient.mPlayerManager) { RoleKeyState data = new RoleKeyState(); data.index = player.m_roleInfo.index; data.position = GameUtils.Convert(player.position); data.hori_angle = player.rotation.eulerAngles.y.raw; PlayerState curState = player.m_StateMachine.m_curState; data.state = curState != null ? (int)curState.m_eState : 0; turnData.roleDatas.Add(data); } foreach (UBasketball ball in GameSystem.Instance.mClient.mCurMatch.mCurScene.balls) { BallKeyState data = new BallKeyState(); data.index = ball.m_id; data.position = GameUtils.Convert(ball.position); data.state = (int)ball.m_ballState; turnData.ballDatas.Add(data); } checkData.Enqueue(turnData); while (checkData.Count > 20) { checkData.Dequeue(); } GameMsgSender.SendTurnCheckData(turnData); }
void OnClickMsg(GameObject go) { if (go == goShortMsgFolder) { m_bShowAll = !m_bShowAll; TweenRotation.Begin(goShortMsgFolder, 0.2f, Quaternion.AngleAxis(m_bShowAll ? 0.0f : 90.0f, new Vector3(0.0f, 0.0f, 1.0f))).method = UITweener.Method.EaseOut; return; } MatchMsgBtn msgBtn = m_matchMsgBtns.Find((MatchMsgBtn matchBtn) => { return(matchBtn.btn == go); }); if (msgBtn == null) { return; } if (!msgBtn.valid) { return; } if (go == goCustomMsg) { m_bShowCustomMsg = !m_bShowCustomMsg; return; } foreach (MatchMsgBtn btn in m_matchMsgBtns) { btn.Reset(msgBtn.msg.cd); } m_bShowCustomMsg = false; GameMsgSender.SendGameShortMsg(m_match.mainRole, msgBtn.msg.id, (uint)msgBtn.msg.recvType); }
protected override void _OnLoadingCompleteImp() { base._OnLoadingCompleteImp(); mCurScene.CreateBall(); if (m_config == null) { Debug.LogError("Match config file loading failed."); return; } mainRole = GameSystem.Instance.mClient.mPlayerManager.GetPlayerById(uint.Parse(m_config.MainRole.id)); mainRole.operMode = Player.OperMode.Input; mainRole.m_InfoVisualizer = new PlayerInfoVisualizer(mainRole); mainRole.m_team.m_role = GameMatch.MatchRole.eOffense; mainRole.position = GameSystem.Instance.MatchPointsConfig.BeginPos.offenses_transform[0].position; mainRole.GrabBall(mCurScene.mBall); _UpdateCamera(mainRole); _CreateGUI(); GameMsgSender.SendGameBegin(); mCurScene.mBasket.onGoal = OnGoal; }
void _OnTimer() { GameMsgSender.SendTimeTracer(m_msgId, m_curTime, m_server); m_msgId++; if (m_msgId > 10000) { m_msgId = 0; } }
void FixedUpdate() { //计数回合内逻辑帧(服务器进度) acumulativeTimeServer += Time.fixedDeltaTime * 1000; if (acumulativeTimeServer >= GAME_UPDATE_LENGTH) { acumulativeTimeServer -= GAME_UPDATE_LENGTH; ++gameUpdateIndexInTurnServer; } //如果预测平均回合间隔将大于定义回合间隔,则可能出现等回合。通过减慢逻辑帧速度,平滑等帧的卡顿 float turnInterval = TurnManager.Instance.averageTurnInterval; if (turnInterval > ((float)TURN_LENGTH / 1000 + 0.2f)) { float factor = turnInterval / ((float)TURN_LENGTH / 1000); //Logger.Log("Scale exactGameUpdateLength: " + factor); exactGameUpdateLength = exactGameUpdateLength * factor; } //执行逻辑帧 acumulativeTime += Time.fixedDeltaTime * 1000; if (acumulativeTime >= exactGameUpdateLength) { acumulativeTime -= exactGameUpdateLength; //计算需执行的逻辑帧数量(叠帧) int gameUpdateNum = CalcGameUpdateNumPerLoop(); for (int i = 0; i < gameUpdateNum && pendingGameUpdateNum > 0; ++i) { //处理回合 bool toProcessTurn = (Game.Instance.CurFrame % GAME_UPDATE_PER_TURN == 0); if (toProcessTurn) { FrameInfo nextTurn = TurnManager.Instance.NextTurn(); if (nextTurn == null) //等回合,不执行逻辑帧 { break; } Game.Instance.ProcessTurn(nextTurn); } //Logger.Log("Turn:" + TurnManager.Instance.CurTurnID + " GameUpdate:" + Game.Instance.CurFrame + // " PendingGameUpdateNum:" + pendingGameUpdateNum); //执行逻辑帧 Game.Instance.Update(GAME_UPDATE_LENGTH); //发送关键数据校验 if (toProcessTurn) { GameMsgSender.SendTurnValidate(Game.Instance.playerInfos); } --pendingGameUpdateNum; } } NetworkManager.Instance.FixedUpdate(Time.fixedDeltaTime); }
void OnServerConnected(NetworkConn.Type type) { if (type == NetworkConn.Type.eGameServer) { Logger.Log("Server connected."); GameMsgSender.SendEnterPlat(); Object.Destroy(gameObject); } }
public void OnSceneLoaded() { if (pvp) { GameMsgSender.SendPVPLoadProgress(50); } else { _RefreshUIPercFunc(50); } m_curLoadingStep = LoadingStep.eLoadedScene; }
//新的一帧到来 public void NewTurn(PlayFrame playFrame) { if (headIdx == -1) { headIdx = 0; } //计算需求的空间 int maxTurnID = (int)playFrame.frames[playFrame.frames.Count - 1].frameNum; int turnNum = maxTurnID - curExecTurnID; if (turnNum > turnQ.Capacity) //当前turnQ空间已经存不下,分配更多空间 { ReallocTurnQ(turnNum); } foreach (FrameInfo turn in playFrame.frames) { int turnID = (int)turn.frameNum; int diff = turnID - curServerTurnID; //帧编号差距 int index = WrapIncIndex(tailIdx, diff); //安放位置 turnQ[index] = turn; //安放 if (diff > 1) //丢包,请求重发 { List <uint> missedTurnIDs = new List <uint>(); for (int i = curServerTurnID + 1; i < turnID; ++i) { missedTurnIDs.Add((uint)i); } GameMsgSender.SendMissTurnReq(missedTurnIDs); } if (diff > 0) //非补帧 { tailIdx = index; curServerTurnID = (int)turn.frameNum; } //Logger.Log("Receive new turn: " + info.frameNum + " " + Time.time); /* * foreach (ClientInput input in turn.info) * { * Logger.Log(string.Format("New turn:{0} Acc:{1} Dir:{2} Cmd:{3}", * // Logger.Log("Input: " + input.acc_id + " " + input.dir + " " + input.cmd); * } * //*/ //通知 if (onNewTurn != null) { onNewTurn(turn); } } CalcAverageTurnInterval(Time.time); }
public override void ViewUpdate() { base.ViewUpdate(); if (!GameSystem.Instance.mClient.mUIManager.isInMatchLoading && m_uiController == null) { _CreateGUI(); PostCreateUI(); practise_behaviour.match = this; practise_behaviour.practise = practise; GameMsgSender.SendGameBegin(); } }
void SendClientEndGame3V3() { TeamMatchData matchData = new TeamMatchData(); matchData.acc_id = MainPlayer.Instance.AccountID; foreach (Player player in GameSystem.Instance.mClient.mPlayerManager) { PlayerMatchData accData = new PlayerMatchData(); accData.acc_id = player.m_roleInfo.acc_id; accData.exit_type = ExitMatchType.EMT_END; matchData.player_data.Add(accData); matchData.role_data.Add(player.mStatistics.data); } GameMsgSender.SendTeamMatchData(matchData); }
void OnHandleMatchBeginTimer() { Debug.Log("match begin."); NetworkConn conn = GameSystem.Instance.mNetworkManager.m_gameConn; if (conn == null || conn is VirtualNetworkConn || m_matchBeginPack == null) { return; } GameSystem.Instance.mNetworkManager.m_gameMsgHandler.UnregisterHandler(MsgID.MatchBeginID, HandleMatchBegin); //conn.m_handler.UnregisterHandler(MsgID.PVPLoadCompleteRespID, HandleLoadComplete); MatchBegin resp = Serializer.Deserialize <MatchBegin>(new MemoryStream(m_matchBeginPack.buffer)); if (resp == null) { Debug.LogError("no pvp loading complete resp"); return; } //close ui foreach (KeyValuePair <uint, List <LuaComponent> > items in mapPlayerIdLoadingState) { items.Value.Clear(); } mapPlayerIdLoadingState.Clear(); GameSystem.Instance.mClient.pause = false; GameMatch_PVP match = GameSystem.Instance.mClient.mCurMatch as GameMatch_PVP; match.OnInitPlayer(); if (MainPlayer.Instance.inPvpJoining) { GameMsgSender.SendGameBegin(); m_delayDestroy = true; } else { match.m_stateMachine.SetState(MatchState.State.eOpening); Object.Destroy(gameObject); } }
public void Update(GameMatch match) { if (!enabled) { _UpdateValidCommand(match); return; } _UpdateValidCommand(match); InputDirection dir = ConvertToDirection(GameSystem.Instance.mClient.mInputManager.mHVDirection); Command cmd = Command.None; if (match.m_uiController == null) { return; } if (GameSystem.Instance.mClient.mInputManager.m_CmdBtn1Click && match.m_uiController.m_btns[0].cmd != Command.None) { cmd = match.m_uiController.m_btns[0].cmd; } else if (GameSystem.Instance.mClient.mInputManager.m_CmdBtn2Click && match.m_uiController.m_btns[1].cmd != Command.None) { cmd = match.m_uiController.m_btns[1].cmd; } else if (GameSystem.Instance.mClient.mInputManager.m_CmdBtn3Click && match.m_uiController.m_btns[2].cmd != Command.None) { cmd = match.m_uiController.m_btns[2].cmd; } else if (GameSystem.Instance.mClient.mInputManager.m_CmdBtn4Click && match.m_uiController.m_btns[3].cmd != Command.None) { cmd = match.m_uiController.m_btns[3].cmd; } if (curCmd != cmd || curDir != dir) { GameMsgSender.SendInput(dir, cmd); } curCmd = cmd; curDir = dir; }
private IEnumerator _LoadUi(List <string> uiNames) { yield return(new WaitForSeconds(1.5f)); for (int i = 0; i < uiNames.Count; i++) { ResourceLoadManager.Instance.LoadPrefab(uiNames[i]); } if (pvp) { GameMsgSender.SendPVPLoadProgress((uint)20); } else { _RefreshUIPercFunc(20); } m_curLoadingStep = LoadingStep.eLoadedUI; Debug.Log("Load ui."); }
private IEnumerator _LoadCharacters(PlayerManager pm, GameMatch match) { yield return(new WaitForSeconds(1.5f)); if (pvp) { GameMatch_PVP match_pvp = match as GameMatch_PVP; match_pvp.LoadPlayers(); GameMsgSender.SendPVPLoadProgress(30); } else { foreach (Player player in pm) { GameSystem.Instance.mClient.mCurMatch.CreateTeamMember(player); } _RefreshUIPercFunc(30); } m_curLoadingStep = LoadingStep.eLoadedPlayers; Debug.Log("Load character."); }
public void OnGameBegin(GameBeginReq req) { if (running) { return; } ClientInput input = new ClientInput(); input.acc_id = req.acc_id; lastInputs[req.acc_id] = input; ++readyPlayerNum; if (readyPlayerNum >= playerNum) { running = true; GameBeginResp resp = new GameBeginResp(); resp.seed = (uint)IM.Random.Range(0L, (long)uint.MaxValue); GameMsgSender.SendGameBeginResp(resp); } }
void NewTurn() { FrameInfo turn = new FrameInfo(); turn.frameNum = curTurnID++; foreach (KeyValuePair <uint, ClientInput> pair in lastInputs) { ClientInput input = new ClientInput(); input.acc_id = pair.Value.acc_id; input.dir = pair.Value.dir; input.cmd = pair.Value.cmd; turn.info.Add(input); } turn.time = Time.time; PlayFrame playFrame = new PlayFrame(); playFrame.frames.Add(turn); turns.Add(turn); GameMsgSender.SendTurn(playFrame); }
void HandleEnterPlatResp(Pack pack) { GameMsgSender.SendGameBegin(); }
void Update() { for (int i = updatePreclist.Count - 1; i >= 0; i--) { UpdatePrec up = updatePreclist[i]; up.curTime += Time.deltaTime; if (up.curTime > updatePreclist[i].targetTime) { up.PrecValue--; up.curTime = 0.0f; up.loadingItem.percentage++; LuaComponent loadingItem = up.loadingItem.transform.GetComponent <LuaComponent>(); if (loadingItem.table != null) { loadingItem.table.Set("loadingState", CommonFunction.GetConstString("STR_LOADING") + up.loadingItem.percentage + "%"); } } if (up.PrecValue == 0) { if (m_curLoadingCmd != null) { if (up.loadingItem.ri != null) { if (up.loadingItem.ri.acc_id == MainPlayer.Instance.AccountID) { m_curLoadingCmd.m_bDone = true; } } else { m_curLoadingCmd.m_bDone = true; } } updatePreclist.RemoveAt(i); } } _InitGameMsgHandler(); //loading queue process if (m_curLoadingCmd == null && m_loadingQueue.Count != 0) { m_curLoadingCmd = m_loadingQueue.Dequeue(); m_curLoadingCmd.Execute(); } if (m_curLoadingCmd != null && m_curLoadingCmd.m_bDone) { if (m_curLoadingCmd.m_bFinalCmd) { m_curLoadingStep = LoadingStep.eLoadingComplete; } m_curLoadingCmd = null; } if (m_curLoadingStep == LoadingStep.eInit) { return; } if (m_wait != null) { m_wait.Update(Time.deltaTime); } GameMatch_PVP match = GameSystem.Instance.mClient.mCurMatch as GameMatch_PVP; if (match == null) { if (m_curLoadingStep == LoadingStep.eLoadingComplete) { if (onComplete != null) { onComplete(); } Object.Destroy(gameObject); } } else { if (m_curLoadingStep == LoadingStep.eLoadedScene && match.m_bPlayerDataReady && !m_pvpLoadPlayer) { LoadCharacter(GameSystem.Instance.mClient.mPlayerManager, match); m_pvpLoadPlayer = true; } if (m_curLoadingStep == LoadingStep.eLoadedPlayers && !m_pvpLoadUI) { LoadUI(match); m_pvpLoadUI = true; } if (m_curLoadingStep == LoadingStep.eLoadingComplete && !m_pvpLoadComplete) { if (onComplete != null) { onComplete(); } m_pvpLoadComplete = true; GameMsgSender.SendLoadingComplete(match.GetMatchType()); } if (m_curLoadingStep == LoadingStep.eLoadingComplete && disConnected) { disConnected = false; ShowOffLine(); } if (m_delayDestroy && !MainPlayer.Instance.inPvpJoining) { // if( m_delayLoadLua != null) // { // m_delayLoadLua.ForEach((LuaComponent item) => // { // item.table.Set("loadingState", CommonFunction.GetConstString("STR_LOAD_COMPLETE")); // item.table.Set("loadDone", true); // }); // } Object.Destroy(gameObject); } } }