dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

commit 4f8c0d3a7cc250464de116c9d4ebe515bccb9553
parent 2450c231c9b0b572a1832289c1bd33a2247531b1
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Mon,  4 Dec 2023 23:55:41 -0500

animate fold cards

Diffstat:
Mpkg/web/handlers/poker.go | 46++++++++++++++++++++++++++++++++++++++--------
1 file changed, 38 insertions(+), 8 deletions(-)

diff --git a/pkg/web/handlers/poker.go b/pkg/web/handlers/poker.go @@ -56,7 +56,7 @@ var PokerInstance = NewPoker() type Ongoing struct { Deck []string - Players []PokerPlayer + Players []*PokerPlayer Events []PokerEvent WaitTurnEvent PokerWaitTurnEvent } @@ -64,7 +64,12 @@ type Ongoing struct { type PokerPlayer struct { Username string Bet int - Cards []string + Cards []PlayerCard +} + +type PlayerCard struct { + Idx int + Name string } type PokerGame struct { @@ -77,6 +82,15 @@ type PokerGame struct { IsGameOver bool } +func (g *Ongoing) GetPlayer(player string) *PokerPlayer { + for _, p := range g.Players { + if p.Username == player { + return p + } + } + return nil +} + func (g *PokerGame) Deal(roomID string) { myTopic := "room_" + roomID @@ -102,9 +116,9 @@ func (g *PokerGame) Deal(roomID string) { } utils.Shuffle(deck) - players := make([]PokerPlayer, NbPlayers) + players := make([]*PokerPlayer, NbPlayers) for idx := range g.Players { - players[idx] = PokerPlayer{Username: g.Players[idx]} + players[idx] = &PokerPlayer{Username: g.Players[idx]} } g.Ongoing = &Ongoing{Deck: deck, Players: players, WaitTurnEvent: PokerWaitTurnEvent{Idx: -1}} @@ -131,6 +145,11 @@ func (g *PokerGame) Deal(roomID string) { continue } fmt.Println("GOT FROM", evt.Player, evt) + if evt.Fold { + if player := g.Ongoing.GetPlayer(evt.Player); player != nil { + PokerPubSub.Pub(myTopic, PlayerFoldEvent{Card1Idx: player.Cards[0].Idx, Card2Idx: player.Cards[1].Idx}) + } + } g.Ongoing.Players[i].Bet += evt.Bet break } @@ -214,7 +233,7 @@ func (g *PokerGame) Deal(roomID string) { Angle: d.Angle, Burn: true, } - g.Ongoing.Players[i].Cards = append(g.Ongoing.Players[i].Cards, card) + g.Ongoing.Players[i].Cards = append(g.Ongoing.Players[i].Cards, PlayerCard{Idx: idx, Name: card}) PokerPubSub.Pub(myTopic, evt) PokerPubSub.Pub(myTopic+"_"+p.Username, YourCardEvent{Idx: j, Name: card}) g.Ongoing.Events = append(g.Ongoing.Events, evt) @@ -317,6 +336,10 @@ type GameIsDoneEvent struct { type ResetCardsEvent struct { } +type PlayerFoldEvent struct { + Card1Idx, Card2Idx int +} + type PokerWaitTurnEvent struct { Idx int } @@ -477,7 +500,7 @@ func PokerSitHandler(c echo.Context) error { func buildYourCardsHtml(authUser *database.User, g *PokerGame) string { html := `<div style="position: absolute; top: 500px; left: 200px;"><div id="yourCard1"></div><div id="yourCard2"></div></div>` if g.Ongoing != nil { - cards := make([]string, 0) + cards := make([]PlayerCard, 0) for _, p := range g.Ongoing.Players { if p.Username == authUser.Username.String() { cards = p.Cards @@ -486,10 +509,10 @@ func buildYourCardsHtml(authUser *database.User, g *PokerGame) string { } html += `<style>` if len(cards) >= 1 { - html += `#yourCard1:before { content: "` + cards[0] + `"; }` + html += `#yourCard1:before { content: "` + cards[0].Name + `"; }` } if len(cards) == 2 { - html += `#yourCard2:before { content: "` + cards[1] + `"; }` + html += `#yourCard2:before { content: "` + cards[1].Name + `"; }` } html += `</style>` } @@ -760,6 +783,13 @@ Loop: c.Response().Flush() continue + } else if evt, ok := payload.(PlayerFoldEvent); ok { + html := `<style>#card` + strconv.Itoa(evt.Card1Idx) + ` { transition: 1s ease-in-out; transform: translateX(400px) translateY(30px) rotateY(180deg); } + #card` + strconv.Itoa(evt.Card2Idx) + ` { transition: 1s ease-in-out; transform: translateX(400px) translateY(30px) rotateY(180deg); }</style>` + send(html) + c.Response().Flush() + continue + } else if _, ok := payload.(ResetCardsEvent); ok { html := `<style>` for i := 1; i <= 52; i++ {