diff options
Diffstat (limited to 'go/game/state.go')
| -rw-r--r-- | go/game/state.go | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/go/game/state.go b/go/game/state.go index 37f31422..912d88f3 100644 --- a/go/game/state.go +++ b/go/game/state.go @@ -164,6 +164,7 @@ func (s *LocalState) Loop() []*Player { for { for _, p := range s.players { + // TODO: remove conceded players from turn rotation s.activePlayerId = p.Id p.Turn++ @@ -426,6 +427,9 @@ func (s *LocalState) orderTriggeredActions(triggeredActions []*TriggeredAction) } switch a := _a.(type) { + case *ConcedeAction: + a.player.concede() + return nil case *DeclareTriggeredActionsAction: for _, a := range a.actions { // Use the order passed back by the user pActions = append(pActions, a) @@ -451,11 +455,15 @@ func (s *LocalState) allPassing(skipFirst bool) (bool, []*Player) { i++ } for ; i < nPlayers; i++ { - p := s.players[(i+s.activePlayerId-1)%nPlayers] w := s.stateBasedActions() if len(w) > 0 { return false, w } + + p := s.players[(i+s.activePlayerId-1)%nPlayers] + if p.Conceded { + continue + } p.Ctrl.SendNotification(newPriorityNotification()) _a, err := p.Ctrl.RecvAction() if err != nil { @@ -463,6 +471,8 @@ func (s *LocalState) allPassing(skipFirst bool) (bool, []*Player) { } switch a := _a.(type) { + case *ConcedeAction: + a.player.concede() case *PassPriority: log.Info("priority passed", "player", p.Name, "passed", fmt.Sprintf("%d/%d", i+1, nPlayers)) case nil: @@ -588,9 +598,20 @@ func (s *LocalState) destroyPermanent(p Permanent) { if pile := p.Pile(); len(pile) > 0 { dropAction := newPileDropAction(p, t, pile) - prompt(p.Controller().Ctrl, + _a, err := prompt(p.Controller().Ctrl, newTargetSelectionPrompt(dropAction, fmt.Sprintf("Drop %s's pile", p))) - s.declareAction(dropAction) + if err != nil { + // FIXME + } + + switch a := _a.(type) { + case *ConcedeAction: + a.player.concede() + case *PileDropAction: + s.declareAction(a) + default: + log.Error("received other action on pile drop prompt") + } } p.Owner().DiscardPile.AddCard(p.Card()) |
