aboutsummaryrefslogtreecommitdiff
path: root/go/game/state.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/game/state.go')
-rw-r--r--go/game/state.go27
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())