Esempio n. 1
0
        public QueryAndRevealState(Lobby lobby, List <Q> objectsToQuery, List <User> usersToQuery = null, TimeSpan?queryTime = null)
        {
            this.Lobby   = lobby;
            this.Objects = objectsToQuery;

            StateChain VoteAndRevealChainGenerator()
            {
                StateChain voteAndRevealStateChain = new StateChain(stateGenerator: (int counter) =>
                {
                    if (counter == 0)
                    {
                        this.Lobby.ResetScores(Score.Scope.Reveal);

                        return(new QueryGameState <Q, T>(
                                   lobby: lobby,
                                   queryObjects: this.Objects,
                                   queriedUsers: usersToQuery,
                                   queryUserPromptGenerator: QueryPromptGenerator,
                                   answerExtractor: AnswerExtractor,
                                   queryExitListener: QueryExitListener,
                                   queryUnityView: QueryUnityViewGenerator(),
                                   queryTime: queryTime));
                    }
                    else if (counter == 1)
                    {
                        var revealGameState = new RevealGameState(
                            lobby: lobby,
                            promptTitle: Prompts.Text.ShowScores,
                            revealUnityView: RevealUnityViewGenerator());
                        revealGameState.AddPerUserExitListener((User user) => user.ScoreHolder.ResetScore(Score.Scope.Reveal));
                        return(revealGameState);
                    }
                    else
                    {
                        return(null);
                    }
                });

                voteAndRevealStateChain.Transition(this.Exit);
                return(voteAndRevealStateChain);
            }

            this.Entrance.Transition(VoteAndRevealChainGenerator);
        }