コード例 #1
0
        private void updateGameplayState(int userId)
        {
            lock (stateLock)
            {
                Debug.Assert(userMap.ContainsKey(userId));

                // The user may have stopped playing.
                if (!spectatorClient.TryGetPlayingUserState(userId, out var spectatorState))
                {
                    return;
                }

                var user = userMap[userId];

                var resolvedRuleset = rulesets.AvailableRulesets.FirstOrDefault(r => r.ID == spectatorState.RulesetID)?.CreateInstance();
                if (resolvedRuleset == null)
                {
                    return;
                }

                var resolvedBeatmap = beatmaps.QueryBeatmap(b => b.OnlineBeatmapID == spectatorState.BeatmapID);
                if (resolvedBeatmap == null)
                {
                    return;
                }

                var score = new Score
                {
                    ScoreInfo = new ScoreInfo
                    {
                        Beatmap = resolvedBeatmap,
                        User    = user,
                        Mods    = spectatorState.Mods.Select(m => m.ToMod(resolvedRuleset)).ToArray(),
                        Ruleset = resolvedRuleset.RulesetInfo,
                    },
                    Replay = new Replay {
                        HasReceivedAllFrames = false
                    },
                };

                var gameplayState = new GameplayState(score, resolvedRuleset, beatmaps.GetWorkingBeatmap(resolvedBeatmap));

                gameplayStates[userId] = gameplayState;
                Schedule(() => StartGameplay(userId, gameplayState));
            }
        }
コード例 #2
0
ファイル: SpectatorScreen.cs プロジェクト: stanriders/osu
 /// <summary>
 /// Starts gameplay for a user.
 /// </summary>
 /// <param name="userId">The user to start gameplay for.</param>
 /// <param name="gameplayState">The gameplay state.</param>
 protected abstract void StartGameplay(int userId, [NotNull] GameplayState gameplayState);