feat: add priority fixed

This commit is contained in:
2026-06-19 21:36:07 +03:30
parent 32f0406e63
commit cf043e2a19
3 changed files with 16 additions and 7 deletions
+12 -7
View File
@@ -58,8 +58,10 @@ type Room struct {
turnTimeout time.Duration
botDelay time.Duration
trickHold time.Duration
firstHandDelay time.Duration
handStart time.Time // زمانِ شروعِ هَندِ جاری (برای پنجره‌ی بُر زدن)
firstHandDelay time.Duration // پنجره‌ی بُر زدن+پخشِ ۵ کارت (ابتدای هَند)
dealDelay time.Duration // پنجره‌ی پخشِ بقیه‌ی کارت‌ها (پس از انتخابِ حکم)
// graceUntil: تا این لحظه هیچ حرکتِ خودکاری انجام نمی‌شود (هماهنگ با انیمیشن‌های کلاینت).
graceUntil time.Time
}
func newRoom(id string, seats [4]*seatInfo, hub *Hub) *Room {
@@ -73,6 +75,7 @@ func newRoom(id string, seats [4]*seatInfo, hub *Hub) *Room {
botDelay: hub.botDelay,
trickHold: hub.trickHold,
firstHandDelay: hub.firstHandDelay,
dealDelay: hub.dealDelay,
}
}
@@ -111,7 +114,7 @@ func (r *Room) start() {
target = targetScore
}
r.game = game.NewGame(target, game.FirstHakem())
r.handStart = time.Now()
r.graceUntil = time.Now().Add(r.firstHandDelay) // بُر زدن + پخشِ ۵ کارت
for seat, s := range r.seats {
if s.client != nil {
s.client.trySend(mustJSON(r.matchedFor(seat)))
@@ -146,7 +149,7 @@ func (r *Room) react() {
r.endRoom()
return
}
r.handStart = time.Now() // شروعِ هَندِ جدید ⇒ پنجره‌ی بُر زدن
r.graceUntil = time.Now().Add(r.firstHandDelay) // هَندِ جدید ⇒ بُر زدن + پخشِ ۵ کارت
r.broadcastState()
r.armTimer()
case game.PhaseGameOver:
@@ -211,9 +214,9 @@ func (r *Room) armTimer() {
delay := r.turnTimeout
if r.seats[actor].auto() {
delay = r.botDelay
// در پنجره‌ی ابتدای هَند (انیمیشنِ بُر زدنِ کلاینت)، حرکتِ خودکار را عقب
// می‌اندازیم تا کارت‌ها وسطِ بُر زدن روی میز نیفتند. نوبتِ انسان دست‌نخورده می‌ماند.
if grace := r.firstHandDelay - time.Since(r.handStart); grace > delay {
// تا پایانِ پنجره‌ی انیمیشنِ کلاینت (بُر زدن یا پخشِ کارت)، حرکتِ خودکار را
// عقب می‌اندازیم تا کارت‌ها وسطِ انیمیشن روی میز نیفتند. نوبتِ انسان دست‌نخورده می‌ماند.
if grace := time.Until(r.graceUntil); grace > delay {
delay = grace
}
}
@@ -244,6 +247,7 @@ func (r *Room) handleInput(act roomAction) {
r.sendError(act.seat, err.Error())
return
}
r.graceUntil = time.Now().Add(r.dealDelay) // انیمیشنِ پخشِ بقیه‌ی کارت‌ها
r.react()
case "play_card":
card, err := game.ParseCard(act.msg.Card)
@@ -294,6 +298,7 @@ func (r *Room) autoChooseTrump(seat int) {
}
}
_ = r.game.ChooseTrump(seat, best)
r.graceUntil = time.Now().Add(r.dealDelay) // انیمیشنِ پخشِ بقیه‌ی کارت‌ها
}
// autoPlayCard یک کارت مجاز (پایین‌ترین کارتِ خالِ زمینه، وگرنه پایین‌ترین کارت) بازی می‌کند.