commit 4f8c0d3a7cc250464de116c9d4ebe515bccb9553
parent 2450c231c9b0b572a1832289c1bd33a2247531b1
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Mon, 4 Dec 2023 23:55:41 -0500
animate fold cards
Diffstat:
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++ {