func onDeal(value string, u *uistate.UIState) { playerInt, curCards := parsePlayerAndCards(value, u) u.CurTable.GetPlayers()[playerInt].SetHand(curCards) if u.CurTable.AllDoneDealing() { u.CurTable.NewRound() if u.CurPlayerIndex >= 0 && u.CurPlayerIndex < u.NumPlayers { view.LoadPassOrTakeOrPlay(u) } else { view.LoadTableView(u) } } }
func handleDebugButtonClick(b *staticimg.StaticImg, u *uistate.UIState) { if b == u.Buttons["player0"] { u.CurPlayerIndex = 0 view.LoadPassOrTakeOrPlay(u) } else if b == u.Buttons["player1"] { u.CurPlayerIndex = 1 view.LoadPassOrTakeOrPlay(u) } else if b == u.Buttons["player2"] { u.CurPlayerIndex = 2 view.LoadPassOrTakeOrPlay(u) } else if b == u.Buttons["player3"] { u.CurPlayerIndex = 3 view.LoadPassOrTakeOrPlay(u) } else if b == u.Buttons["table"] { view.LoadTableView(u) } else if b == u.Buttons["hand"] { view.LoadPassOrTakeOrPlay(u) } else if b == u.Buttons["restart"] { sync.ResetGame(u.LogSG, u.IsOwner, u) } }
func onTake(value string, u *uistate.UIState) { // logic playerInt, _ := parsePlayerAndCards(value, u) p := u.CurTable.GetPlayers()[playerInt] passed := p.GetPassedTo() for _, c := range passed { p.AddToHand(c) } u.CurTable.GetPlayers()[playerInt].SetDoneTaking(true) if u.SequentialPhases { if u.CurTable.AllDoneTaking() { for _, player := range u.CurTable.GetPlayers() { if player.HasTwoOfClubs() { u.CurTable.SetFirstPlayer(player.GetPlayerIndex()) } } // UI if u.CurView == uistate.Play { view.LoadPlayView(true, u) } } } else if p.HasTwoOfClubs() { u.CurTable.SetFirstPlayer(p.GetPlayerIndex()) // UI if u.CurView == uistate.Play && u.CurPlayerIndex != playerInt { view.LoadPlayView(true, u) } } // UI if u.CurView == uistate.Table { quit := make(chan bool) u.AnimChans = append(u.AnimChans, quit) reposition.AnimateTableCardTake(passed, u.CurTable.GetPlayers()[playerInt], quit, u) view.LoadTableView(u) } }
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) } }