diff options
Diffstat (limited to 'go/game/playerControl.go')
| -rw-r--r-- | go/game/playerControl.go | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/go/game/playerControl.go b/go/game/playerControl.go new file mode 100644 index 00000000..2491dab7 --- /dev/null +++ b/go/game/playerControl.go @@ -0,0 +1,66 @@ +package game +import "log" + +type PlayerNotificationType int + +const ( + DeclaredActionNotification = iota + ResolvedActionNotification + PriorityNotification +) + +type PlayerNotification struct { + Notification PlayerNotificationType + Action Action +} + +func NewPriorityNotification() PlayerNotification { + return PlayerNotification{PriorityNotification, nil} +} + +func NewDeclaredActionNotification(a Action) PlayerNotification { + return PlayerNotification{DeclaredActionNotification, a} +} + +func NewResolvedActionNotification(a Action) PlayerNotification { + return PlayerNotification{ResolvedActionNotification, a} +} + +type PlayerControl interface { + RecvAction() Action + SendNotification(PlayerNotification) +} + +type DummyPlayerControl struct{ P *Player } + +func (c *DummyPlayerControl) RecvAction() Action { return NewPassPriorityAction(c.P) } +func (*DummyPlayerControl) SendNotification(PlayerNotification) { return } + +type ChanPlayerControl struct { + Actions chan Action + Notifications chan PlayerNotification +} + +func (c *ChanPlayerControl) SendAction(a Action) { c.Actions <- a } +func (c *ChanPlayerControl) RecvAction() Action { return <-c.Actions } +func (c *ChanPlayerControl) SendNotification(n PlayerNotification) { c.Notifications <- n } +func (c *ChanPlayerControl) RecvNotification() *PlayerNotification { + select { + case n := <-c.Notifications: + return &n + default: + return nil + } +} + +func NewChanPlayerControl() *ChanPlayerControl { + a := make(chan Action) + n := make(chan PlayerNotification) + return &ChanPlayerControl{a, n} +} + +func PromptAction(ctrl PlayerControl) Action { + log.Println("PromptAction") + ctrl.SendNotification(NewPriorityNotification()) + return ctrl.RecvAction() +} |
