diff --git a/game.md b/game.md index e59d79b..0de7655 100644 --- a/game.md +++ b/game.md @@ -69,9 +69,13 @@ ## 青云龙台(5) -待定 - ```json lines { + // 等待插卡时间,单位秒 + "wait_card": 0, + // 插卡后持续时间,单位秒 + "wait": 0 } ``` + +`wait_card` 为等待插卡的时长,超过时长将直接结束且没有任何现场效果。`wait` 为插卡后持续的现场效果时间。 \ No newline at end of file diff --git a/internal/routes/play.go b/internal/routes/play.go index 8ecf20b..63d9204 100644 --- a/internal/routes/play.go +++ b/internal/routes/play.go @@ -22,6 +22,9 @@ func switchPoint(ctx context.Context, point int) leaf.HandlerFunc { case 4: // 4号点位(发卡机) return play.PushCard(ctx) + case 5: + // 5号点位(等待插卡) + return play.WaitCard default: return play.Default } diff --git a/internal/routes/play/push_card.go b/internal/routes/play/push_card.go index 91a517e..32a9fbf 100644 --- a/internal/routes/play/push_card.go +++ b/internal/routes/play/push_card.go @@ -26,7 +26,7 @@ func PushCard(ctx context.Context) leaf.HandlerFunc { devices := make([]*card_device.Device, 0) for _, group := range config.C.Game.CardGroups { gv, _ := json.Marshal(group) - zap.S().Info("发卡指针初始化:", string(gv)) + zap.S().Info("发卡器指针:", string(gv)) device, err := card_device.New(group) if err != nil { diff --git a/internal/routes/play/wait_card.go b/internal/routes/play/wait_card.go new file mode 100644 index 0000000..ff400f2 --- /dev/null +++ b/internal/routes/play/wait_card.go @@ -0,0 +1,43 @@ +package play + +import ( + "game-driver/internal/middleware" + "game-driver/internal/schema" + "game-driver/leaf" + "sync" + "time" +) + +func WaitCard(c *leaf.Context) { + payload := leaf.Value[*schema.PlayModal](c, middleware.PayloadJSONKey) + + var waitCard time.Duration + if a, ok := payload.Game["wait_card"]; ok { + if v, ok := a.(float64); ok { + waitCard = time.Duration(v) + } + } + + // 等待组 + var wait sync.WaitGroup + defer wait.Wait() + + a := make(chan string) + defer close(a) + + wait.Add(1) + go func() { + defer wait.Done() + time.Sleep(3 * time.Second) + a <- "卡片数据" + }() + + select { + case <-c.Done(): + case <-time.After(waitCard * time.Second): + case _, ok := <-a: // 等待卡片插入 + if ok { // 非关闭信号 + Default(c) + } + } +}