func onPass(value string, u *uistate.UIState) { // logic playerInt, curCards := parsePlayerAndCards(value, u) var receivingPlayer int switch u.CurTable.GetDir() { case direction.Right: receivingPlayer = (playerInt + 3) % u.NumPlayers case direction.Left: receivingPlayer = (playerInt + 1) % u.NumPlayers case direction.Across: receivingPlayer = (playerInt + 2) % u.NumPlayers } for _, c := range curCards { u.CurTable.GetPlayers()[playerInt].RemoveFromHand(c) } u.CurTable.GetPlayers()[playerInt].SetPassedFrom(curCards) u.CurTable.GetPlayers()[receivingPlayer].SetPassedTo(curCards) u.CurTable.GetPlayers()[playerInt].SetDonePassing(true) // UI if u.CurView == uistate.Table { quit := make(chan bool) u.AnimChans = append(u.AnimChans, quit) reposition.AnimateTableCardPass(curCards, receivingPlayer, quit, u) view.LoadTableView(u) } else if u.CurView == uistate.Take { if u.SequentialPhases { if u.CurTable.AllDonePassing() { view.LoadTakeView(u) } } else if u.CurPlayerIndex == receivingPlayer { view.LoadTakeView(u) } } else if u.CurView == uistate.Play && u.CurTable.AllDonePassing() { view.LoadPlayView(true, u) } }
func endClickPass(t touch.Event, u *uistate.UIState) { if u.CurCard != nil { if !dropCardOnTarget(u.CurCard, t, u) { // check to see if card was removed from a drop target sync.RemoveCardFromTarget(u.CurCard, u) // add card back to hand reposition.ResetCardPosition(u.CurCard, u.Eng) reposition.RealignSuit(u.CurCard.GetSuit(), u.CurCard.GetInitial().Y, u) } // check to see whether pull tab should be displayed readyToPass := true for _, d := range u.DropTargets { if d.GetCardHere() == nil { readyToPass = false } } passButton := u.Buttons["pass"] if readyToPass { if passButton.GetDisplayingImage() { u.Eng.SetSubTex(passButton.GetNode(), passButton.GetImage()) passButton.SetHidden(false) passButton.SetDisplayingImage(true) } for _, img := range u.Other { if img.GetDisplayingImage() { u.Eng.SetSubTex(img.GetNode(), img.GetAlt()) img.SetHidden(false) img.SetDisplayingImage(false) } } } else { var emptyTex sprite.SubTex u.Eng.SetSubTex(passButton.GetNode(), emptyTex) passButton.SetHidden(true) passButton.SetDisplayingImage(true) for _, img := range u.Other { if !img.GetDisplayingImage() { u.Eng.SetSubTex(img.GetNode(), img.GetImage()) img.SetHidden(false) img.SetDisplayingImage(true) } } } } pressed := unpressButtons(u) for _, p := range pressed { if p == u.Buttons["pass"] { ch := make(chan bool) success := passCards(ch, u.CurPlayerIndex, u) quit := make(chan bool) u.AnimChans = append(u.AnimChans, quit) go func() { onDone := func() { if !success { fmt.Println("Invalid pass") } else if u.CurView == uistate.Pass { view.LoadTakeView(u) } } reposition.SwitchOnChan(ch, quit, onDone, u) }() } } u.CurCard = nil }