Пример #1
0
        public static void StartTurn(this GameTurn turn)
        {
            var startAction = new GameAction {
                State = GameActionState.ChooseLocation
            };

            turn.CurrentAction = startAction;
            var invoker = new ActionContextInvoker(turn.Game);

            invoker.DoActionSingle(startAction);
        }
        public SalesOfficeViewModel(string userName, Game game)
        {
            IsActivePlayer = FormHelper.IsActivePlayer(userName, game);

            var actionManager = new ActionContextInvoker(game);
            DrawIsValidActionState = actionManager.IsValidTransition(GameActionState.ContractDraw);
            DraftIsValidActionState = actionManager.IsValidTransition(GameActionState.ContractDraft);

            Game = game;
            DrawState = GameActionState.ContractDraw;

            AllContracts = game.GetContractDecks();
            DrawCount = AllContracts[GameContractLocation.DrawDeck].Count;

            SetDraftContractModels(AllContracts);
        }
 private bool ValidateSpace(Game game, PlayerLocation location)
 {
     var state = (GameActionState)Enum.Parse(typeof(GameActionState), location.ToString());
     var action = new GameAction { State = state, Location = game.CurrentTurn.CurrentAction.Location };
     var invoker = new ActionContextInvoker(game);
     return invoker.IsValidTransition(action);
 }
Пример #4
0
        public static bool IsValidAction(this GameAction action, Game game)
        {
            var invoker = new ActionContextInvoker(game);

            return(invoker.IsValidGameState(action));
        }
Пример #5
0
 public static bool IsValidAction(this GameAction action, Game game)
 {
     var invoker = new ActionContextInvoker(game);
     return invoker.IsValidGameState(action);
 }
Пример #6
0
        public ActionResult TakeGameAction(int id, GameActionState gameAction, string actionLocation = "")
        {
            using (var galleristContext = new GalleristComponentsDbContext())
            {
                using (var identityContext = new ApplicationDbContext()) //may not need this anymore after adding the authorize helper
                {
                    var gameResponse = GameManager.GetGame(id, galleristContext);
                    var game = gameResponse.Game;

                    //todo todo todo
                    //make sure the player taking an action is the current player
                    //compare current action to game state to make sure a valid action was taken (e.g. player can't move to board spot A from board spot A) [states..]
                    //todo make getting user by username a method (is it one already?)
                    var currentUser = identityContext.Users.FirstOrDefault(m => m.UserName == User.Identity.Name);

                    //todo refactor some of this into a game logic module
                    var player = game.Players.FirstOrDefault(p => p.UserId == currentUser.Id);
                    if (player == null)
                    {
                        return View("GameError");
                    }
                    if (player.Id != game.CurrentPlayerId )
                    {
                        return View("GameError");
                    }

                    var actionInvoker = new ActionContextInvoker(game);

                    if(!actionInvoker.DoAction(gameAction, actionLocation))
                    {
                        return Redirect("~/Game/Play/" + id);
                    }

                    //check if it is one of the special cases where the action must be confirmed before allowing the next step to proceed (e.g. player must draw cards)
                    //if yes take an intermediate step, still remains current player's turn
                    //if no, continue doing logic things  //determine order of bumped player's actions, can these happen at the end of current player's turn?
                    //check player locations for action taken by current player to see if any players need to be "bumped" to another spot
                    //somewhere in here we need to inject bumped player into turn order, we also need a way to specify that the current "turn" for a bumped player is not a full turn [bumped turn flag or something]
                    //let said player take bumped turn if necessary
                    //again do the updatey
                    //need some signalr stuff so we can show the action to everyone when it is done (intermediate step or not) as well as update money, influence, board, etc.
                    //update money, influence, board, etc.
                    galleristContext.SaveChanges();

                    var nextPlayer = identityContext.Users.First(m => m.Id == game.CurrentPlayer.UserId);
                    if (nextPlayer.AllowsEmails)
                    {
                        var gameUrl = Request.Url.GetLeftPart(UriPartial.Authority) + "/Game/Play/" + game.Id;
                        var emailTitle = nextPlayer.UserName + ", it is your turn!";
                        var emailBody = "It is your turn in a game you are playing. You can take your turn by visiting The Gallerist Online" +
                            " and viewing your active games or by clicking the following link: " + gameUrl;

                        EmailManager.SendEmail(emailTitle, emailBody, new List<string> { nextPlayer.Email });
                    }
                    PushHelper singleton = PushHelper.GetPushEngine();
                    singleton.RefreshGame(game.Players.Where(p => p.UserName != User.Identity.Name).Select(p => p.UserName).ToList());
                    return Redirect("~/Game/Play/" + id);
                }
            }
        }
Пример #7
0
 public static void StartTurn(this GameTurn turn)
 {
     var startAction = new GameAction { State = GameActionState.ChooseLocation };
     turn.CurrentAction = startAction;
     var invoker = new ActionContextInvoker(turn.Game);
     invoker.DoActionSingle(startAction);
 }