Exemple #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="evt"></param>
        /// <param name="chosenDifficulty"></param>
        /// <param name="client"></param>
        private void ChooseDifficultyHandler(string evt, byte[] chosenDifficulty, VMEODClient client)
        {
            if (GameState.Equals(FreeSOMazeStates.Lobby) && NextState.Equals(FreeSOMazeStates.Invalid))
            {
                FreeSOMazePlayer caller  = null;
                FreeSOMazePlayer partner = null;
                if (LogicPlayer != null && client.Equals(LogicPlayer.Client))
                {
                    caller  = LogicPlayer;
                    partner = CharismaPlayer;
                }
                else
                {
                    caller  = CharismaPlayer;
                    partner = LogicPlayer;
                }
                int difficultyNum = BitConverter.ToInt32(chosenDifficulty, 0);
                FreeSOMazeDifficulties difficulty = FreeSOMazeDifficulties.Unselected;
                if (Enum.IsDefined(typeof(FreeSOMazeDifficulties), difficultyNum))
                {
                    difficulty = (FreeSOMazeDifficulties)Enum.ToObject(typeof(FreeSOMazeDifficulties), difficultyNum);
                }

                ValidateDifficulty(caller, difficulty, partner);
            }
        }
Exemple #2
0
 internal void Reset()
 {
     _BreadCrumbs  = new List <AbstractMazeCell <FreeSOMazeData> >();
     _Difficulty   = FreeSOMazeDifficulties.Unselected;
     _Location     = null;
     _Cooldown     = 0;
     _TotalMoves   = 0;
     _Payout       = 0;
     DelayedEvents = new List <Tuple <string, byte[]> >();
 }
Exemple #3
0
 /// <summary>
 /// Validates the difficulties of both players, triggering the start of the game only if they both agree.
 /// </summary>
 /// <param name="caller"></param>
 /// <param name="chosenDifficulty"></param>
 /// <param name="partner"></param>
 private void ValidateDifficulty(FreeSOMazePlayer caller, FreeSOMazeDifficulties chosenDifficulty, FreeSOMazePlayer partner)
 {
     lock (DifficultyLock)
     {
         if (GameState.Equals(FreeSOMazeStates.Lobby) && NextState.Equals(FreeSOMazeStates.Invalid))
         {
             caller.Difficulty = chosenDifficulty;
             if (partner != null)
             {
                 if (caller.Difficulty.Equals(partner.Difficulty))
                 {
                     ChosenMazeDifficulty = chosenDifficulty;
                     EnqueueGotoState(FreeSOMazeStates.GeneratingMaze);
                 }
                 else
                 {
                     partner.Send("FreeSOMaze_partner_difficulty", BitConverter.GetBytes((int)chosenDifficulty));
                 }
             }
         }
     }
 }
Exemple #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="state"></param>
        private void GotoState(FreeSOMazeStates state)
        {
            GameState = state;
            Tock      = 0;
            switch (state)
            {
            case FreeSOMazeStates.Lobby:
            {
                ChosenMazeDifficulty = FreeSOMazeDifficulties.Unselected;
                CharismaPlayer?.Reset();
                if (CharismaPlayer?.IsLoaded ?? false)
                {
                    SendLobbyInfoEvent(CharismaPlayer, LogicPlayer);
                }
                LogicPlayer?.Reset();
                if (LogicPlayer?.IsLoaded ?? false)
                {
                    SendLobbyInfoEvent(LogicPlayer, CharismaPlayer);
                }

                if (CurrentMaze != null)
                {
                    CurrentMaze.OnMazeGenerated       -= MazeGeneratedHandler;
                    CurrentMaze.OnFinalProcessingCell -= OnProcessedCellHandler;
                    CurrentMaze.OnDeadEndCreation     -= OnDeadEndHandler;
                    Solution          = null;
                    RawMaze           = null;
                    MazeTimeRemaining = 0;
                    BroadcastSharedEvent("FreeSOMaze_time", BitConverter.GetBytes(MazeTimeRemaining));
                }
                else
                {
                    EveryDeadEndCell = new List <AbstractMazeCell <FreeSOMazeData> >();
                }
                break;
            }

            case FreeSOMazeStates.GeneratingMaze:
            {
                CurrentMaze = AbstractMazeGenerator <FreeSOMazeData> .GetEmptyMaze(MazeSizes[ChosenMazeDifficulty], MazeSizes[ChosenMazeDifficulty]);

                CurrentMaze.OnMazeGenerated       += MazeGeneratedHandler;
                CurrentMaze.OnFinalProcessingCell += OnProcessedCellHandler;
                CurrentMaze.OnDeadEndCreation     += OnDeadEndHandler;
                var origin = ThankU.Next(0, (int)BuildFromOrigins.Dead_Center + 1);
                CurrentMaze.BuildFromOrigin(origin);
                BroadcastSharedEvent("FreeSOMaze_goto_maze", BitConverter.GetBytes((int)ChosenMazeDifficulty));
                break;
            }

            case FreeSOMazeStates.LoadingMaze:
            {
                MazeTimeRemaining = 0;
                int cardinal = 0;
                if (CharismaPlayer != null)
                {
                    cardinal = GetSolutionCardinal(CharismaPlayer);
                    CharismaPlayer.CurrentFacingCardinal = (FreeSOMazeCardinals)Enum.ToObject(typeof(FreeSOMazeCardinals), cardinal);
                    CharismaPlayer.Send("FreeSOMaze_show_maze", CharismaPlayer.GetLocationData((int)FreeSOMazeCardinals.Invalid));
                }
                if (LogicPlayer != null)
                {
                    cardinal = GetSolutionCardinal(LogicPlayer);
                    LogicPlayer.CurrentFacingCardinal = (FreeSOMazeCardinals)Enum.ToObject(typeof(FreeSOMazeCardinals), cardinal);
                    LogicPlayer.Send("FreeSOMaze_show_maze", LogicPlayer.GetLocationData((int)FreeSOMazeCardinals.Invalid));
                }
                break;
            }

            case FreeSOMazeStates.NavigatingMaze:
            {
                CharismaPlayer.Cooldown = GLOBAL_COOLDOWN;
                LogicPlayer.Cooldown    = GLOBAL_COOLDOWN;
                SendAllowMazeEvent(CharismaPlayer, false);
                SendAllowMazeEvent(LogicPlayer, false);
                MazeTimeRemaining = RoundTimes[ChosenMazeDifficulty];
                BroadcastSharedEvent("FreeSOMaze_time", BitConverter.GetBytes(MazeTimeRemaining));
                break;
            }

            case FreeSOMazeStates.Gameover:
            {
                MazeTimeRemaining = 0;
                break;
            }
            }
        }