Esempio n. 1
0
    public void NextTick()
    {
        CurrentServerTick++;

        if (!snapshots.ContainsKey(CurrentServerTick))
        {
            Debug.Log("No next snapshot");
            return;
        }

        HashSet <int> playersToRemove = new HashSet <int>(clientWorld.Players.Keys);

        foreach (var playerState in snapshots[CurrentServerTick].PlayerStates)
        {
            playersToRemove.Remove(playerState.PlayerId);

            if (playerState.PlayerId != clientWorld.PlayerId)
            {
                if (clientWorld.Players.ContainsKey(playerState.PlayerId))
                {
                    ApplyInterpolation(playerState);
                }
                else
                {
                    clientWorld.CreateClientPlayer(playerState);
                }
            }
        }

        foreach (var playerId in playersToRemove)
        {
            clientWorld.RemoveClientPlayer(playerId);
        }

        snapshots.Remove(CurrentServerTick);
    }