Sanguosha.Core.Games.RoleGame.DoPlayerTrigger.Run C# (CSharp) Méthode

Run() public méthode

public Run ( Sanguosha.Core.Triggers.GameEvent gameEvent, GameEventArgs eventArgs ) : void
gameEvent Sanguosha.Core.Triggers.GameEvent
eventArgs Sanguosha.Core.Triggers.GameEventArgs
Résultat void
            public override void Run(GameEvent gameEvent, GameEventArgs eventArgs)
            {
                Game game = Game.CurrentGame;
                Player currentPlayer = eventArgs.Source;
                if (currentPlayer.IsImprisoned)
                {
                    currentPlayer.IsImprisoned = false;
                    GameDelays.Delay(GameDelays.Imprisoned);
                    return;
                }
                game.CurrentPlayer = currentPlayer;
                game.PhasesSkipped.Clear();
                Game.CurrentGame.Emit(GameEvent.PhaseBeforeStart, new GameEventArgs() { Source = currentPlayer });
                while (true)
                {
                    if (game.PhasesSkipped.Contains(game.CurrentPhase) && game.CurrentPhaseEventIndex < Game.PhaseEvents.Length - 1)
                    {
                        game.CurrentPhaseEventIndex = Game.PhaseEvents.Length - 1;
                        Game.CurrentGame.NotificationProxy.NotifyLogEvent(new LogEvent("SkipPhase", currentPlayer, new LogEventArg(string.Format("Phase.{0}", (int)game.CurrentPhase))),
                                                                          new List<Player>() { currentPlayer },
                                                                          false);
                        continue;
                    }
                    GameEventArgs args = new GameEventArgs() { Source = currentPlayer };
                    Trace.TraceInformation("Main game loop running {0}:{1}", currentPlayer.Id, game.CurrentPhase);
                    try
                    {
                        var phaseEvent = Game.PhaseEvents[game.CurrentPhaseEventIndex];
                        if (phaseEvent.ContainsKey(game.CurrentPhase))
                        {
                            game.Emit(Game.PhaseEvents[game.CurrentPhaseEventIndex][game.CurrentPhase], args);
                        }
                    }
                    catch (TriggerResultException e)
                    {
                        if (e.Status == TriggerResult.End)
                        {
                        }
                    }
                    catch (EndOfTurnException)
                    {
                        break;
                    }

                    game.CurrentPhaseEventIndex++;
                    if (game.CurrentPhaseEventIndex >= Game.PhaseEvents.Length || currentPlayer.IsDead)
                    {
                        game.CurrentPhaseEventIndex = 0;
                        game.CurrentPhase++;
                        if ((int)game.CurrentPhase >= Enum.GetValues(typeof(TurnPhase)).Length - 2 || (int)game.CurrentPhase < 0 || currentPlayer.IsDead)
                        {
                            break;
                        }
                        GameDelays.Delay(GameDelays.ChangePhase);
                    }
                }
                game.CurrentPhase = TurnPhase.Inactive;
                Game.CurrentGame.Emit(GameEvent.PhasePostEnd, new GameEventArgs() { Source = currentPlayer });
                if (game.Decks[null, DeckType.Compute].Count > 0)
                {
                    game.PlaceIntoDiscard(null, new List<Card>(game.Decks[null, DeckType.Compute]));
                }
            }
RoleGame.DoPlayerTrigger