public FrameState GetPlayerState(long guid) { if (!m_frameStateDic.ContainsKey(guid) || m_frameStateDic[guid].Count <= 0) { return(FrameState.zero); } int curFrame = Math.Min(m_frameStateDic[guid].Count, syncInOutMuti + 1); FrameState result = m_frameStateDic[guid][curFrame - 1]; int willRemoveFrams = 0; if (m_frameStateDic[guid].Count <= syncInOutMuti) { willRemoveFrams = curFrame - 1; } else if (m_frameStateDic[guid].Count > syncInOutMuti + maxFrameBuffedSize) { willRemoveFrams = m_frameStateDic[guid].Count - 1; } else { willRemoveFrams = syncInOutMuti; } for (int i = 0; i < willRemoveFrams; i++) { m_frameStateDic[guid].RemoveAt(0); } return(result); }
void CS_MoveSyncHandle(long guid, CS_MoveSync msg) { EntryManager.Instance.MoveSync(guid, msg.pos, msg.dir); FrameState frameState = new FrameState(msg.pos, msg.dir); FrameSyncManager.Instance.FrameAdd(guid, frameState); }
public void FrameAdd(long guid, FrameState state) { if (!m_frameStateDic.ContainsKey(guid)) { m_frameStateDic.Add(guid, new List <FrameState>()); } m_frameStateDic[guid].Add(state); }
void UpdatePlayerMoveSyncOther() { m_playerMoveSyncTime += deltaTime; if (m_playerMoveSyncTime < GameConfig.PlayerMoveSyncInterval) { return; } m_playerMoveSyncTime -= GameConfig.PlayerMoveSyncInterval; List <Player> playerList = GetPlayerList(); for (int i = playerList.Count - 1; i >= 0; i--) { Player player = playerList[i]; SC_MoveSyncOther msg = new SC_MoveSyncOther(); List <PlayerState> tmpList = new List <PlayerState>(); for (int j = playerList.Count - 1; j >= 0; j--) { Player otherPlayer = playerList[j]; if (otherPlayer.guid != player.guid) { FrameState fState = FrameSyncManager.Instance.GetPlayerState(otherPlayer.guid); PlayerState pState = new PlayerState(); pState.guid = otherPlayer.guid; pState.pos = fState.pos; pState.dir = fState.dir; pState.radius = otherPlayer.radius; tmpList.Add(pState); } } msg.playerStateList = tmpList.ToArray <PlayerState>(); if (msg.playerStateList.Length > 0) { SessionManager.Instance.SendTo(player.guid, msg); } } }