public CourseExecution(Course course, ILabyrinth labyrinth)
        {
            this.course = course;

            Queue <int>    steps;
            Queue <string> stepValues;

            SQLiteUtilities.GetPlayerStepsForCourse(course.Id, out steps, out stepValues);

            Actions      = steps.ToArray();
            ActionValues = stepValues.ToArray();
        }
Example #2
0
        private void OnPlayerStatusChanged()
        {
            if (player.ServerPlayerGameState == ClientGameState.Connecting)
            {
                serverPlayerInformation.AddPlayerOrReconnect(player);
            }
            else if (player.ServerPlayerGameState == ClientGameState.Pairing)
            {
                pairedId = SQLiteUtilities.GetPairing(player.deviceUniqueIdentifier, player.serverDeviceType);

                if (pairedId == null)
                {
                    player.TargetSetGameState(player.connectionToClient, ClientGameState.NoAssociatedPair);
                }
                else
                {
                    // BUG FIX??
                    // Team Id not assigned to tablet on reconnect
                    if (player.serverDeviceType == Promoscience.DeviceType.Headset)
                    {
                        InitializeHeadsetInformation();
                    }
                    else
                    {
                        StartCoroutine(PairingDeviceCoroutine());
                    }
                }
            }
            else if (player.ServerPlayerGameState == ClientGameState.WaitingReplay)
            {
                // TODO
                // Steps to recover
                Queue <int>    steps;
                Queue <string> stepValues; //jsons
                SQLiteUtilities.GetPlayerStepsForCourse(player.ServerCourseId, out steps, out stepValues);

                // Use the steps for playback
                player.TargetSetViewingLocalPlayback(
                    player.connectionToClient,
                    GameManager.Instance.CurrentGame.CurrentLevel.Labyrinth.Id,
                    steps.ToArray(),
                    stepValues.ToArray());
            }
            else if (player.serverDeviceType == Promoscience.DeviceType.Headset && player.ServerPlayerGameState == ClientGameState.Reconnecting)
            {
                pairedId = SQLiteUtilities.GetPairing(player.deviceUniqueIdentifier, player.serverDeviceType);

                if (pairedId == null)
                {
                    player.TargetSetGameState(player.connectionToClient, ClientGameState.ReconnectingNoAssociatedPair);
                }
                else
                {
                    if (Server.Instance.State.Value == ServerState.Level && player.ServerCourseId != -1)
                    {
#if UNITY_EDITOR || UNITY_STANDALONE_WIN
                        int courseLabyrinthId = SQLiteUtilities.GetPlayerCourseLabyrinthId(player.ServerCourseId);
#endif
                        if (courseLabyrinthId == GameManager.Instance.CurrentGame.CurrentLevel.Labyrinth.Id)
                        {
#if UNITY_EDITOR || UNITY_STANDALONE_WIN
                            Queue <int> steps;

                            steps = SQLiteUtilities.GetPlayerStepsForCourse(player.ServerCourseId);

                            if (SQLiteUtilities.HasPlayerAlreadyCompletedTheRound(player.ServerCourseId))
                            {
                                // Use the steps for playback
                                player.TargetSetPairedIpAdress(
                                    player.connectionToClient,
                                    "");

                                player.TargetSetLevelCompleted(
                                    player.connectionToClient,
                                    GameManager.Instance.CurrentGame.CurrentLevel.Labyrinth.Id,
                                    steps.ToArray());
                            }
                            else
                            {
                                if (steps.Count > 0)
                                {
                                    // Connection drop, used the steps to resume where you were
                                    GameManager.Instance.CurrentGame.JoinGameLevelWithSteps(player, steps.ToArray());
                                    player.TargetSetPairedIpAdress(player.connectionToClient, "");
                                }
                                else
                                {
                                    player.TargetSetPairedIpAdress(player.connectionToClient, "");
                                    player.TargetSetGameState(player.connectionToClient, ClientGameState.Ready);
                                }
                            }
#endif
                        }
                        else
                        {
                            player.TargetSetPairedIpAdress(player.connectionToClient, "");
                            player.TargetSetGameState(player.connectionToClient, ClientGameState.Ready);
                        }
                    }
                    else
                    {
                        player.TargetSetPairedIpAdress(player.connectionToClient, "");
                        player.TargetSetGameState(player.connectionToClient, ClientGameState.Ready);
                    }
                }
            }
            else if (player.ServerPlayerGameState == ClientGameState.Ready)
            {
                if (
                    Server.Instance.State.Value == ServerState.Level ||
                    Server.Instance.State.Value == ServerState.Quickplay)
                {
                    GameManager.Instance.CurrentGame.JoinGameLevel(player);
                }
                else if (Server.Instance.State.Value == ServerState.Intermission)
                {
                    player.TargetSetGameState(player.connectionToClient, ClientGameState.WaitingForNextLevel);
                }
            }
        }