aboutsummaryrefslogtreecommitdiff
path: root/go/game
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2023-02-14 16:05:06 +0100
committerFlorian Fischer <florian.fischer@muhq.space>2025-01-27 16:43:49 +0100
commitb85c1a85e3f9a53321495e4d015e7620b29f9929 (patch)
tree314469f8bcbe61cea3c055d01e2c961b0e988708 /go/game
parente049500b213c85c9d1556e01717226a191d2dce8 (diff)
downloadmuhqs-game-b85c1a85e3f9a53321495e4d015e7620b29f9929.tar.gz
muhqs-game-b85c1a85e3f9a53321495e4d015e7620b29f9929.zip
add sealed activity to select a starting deck
Diffstat (limited to 'go/game')
-rw-r--r--go/game/card.go2
-rw-r--r--go/game/pileOfCards.go17
-rw-r--r--go/game/set.go43
3 files changed, 59 insertions, 3 deletions
diff --git a/go/game/card.go b/go/game/card.go
index a6abffd1..031b95bf 100644
--- a/go/game/card.go
+++ b/go/game/card.go
@@ -291,7 +291,7 @@ func NewCard(cardPath string) *Card {
c := Card{
Name: "",
- Set: SetIdentifierNames[set],
+ Set: SetNames[set],
Type: undefinedCardType,
BuyCost: NOT_BUYABLE,
Values: map[string]interface{}{},
diff --git a/go/game/pileOfCards.go b/go/game/pileOfCards.go
index 0a5eaa97..f88dfe93 100644
--- a/go/game/pileOfCards.go
+++ b/go/game/pileOfCards.go
@@ -1,6 +1,8 @@
package game
import (
+ "fmt"
+
"golang.org/x/exp/slices"
)
@@ -14,6 +16,7 @@ type PileOfCards interface {
RemoveCard(card *Card)
MoveCard(card *Card, into PileOfCards)
MoveInto(into PileOfCards)
+ ToList() string
}
type PileOfCardsBase struct {
@@ -75,3 +78,17 @@ func (poc *PileOfCardsBase) MoveInto(into PileOfCards) {
into.AddCards(poc.cards)
poc.cards = []*Card{}
}
+
+func (poc *PileOfCardsBase) ToList() (list string) {
+ m := make(map[string]int)
+ for _, card := range poc.cards {
+ path := card.Path()
+ m[path]++
+ }
+
+ for path, amount := range m {
+ list += fmt.Sprintf("%d %s\n", amount, path)
+ }
+
+ return list[:len(list)-1]
+}
diff --git a/go/game/set.go b/go/game/set.go
index b0565eca..aca5b7f5 100644
--- a/go/game/set.go
+++ b/go/game/set.go
@@ -2,6 +2,11 @@ package game
import (
"log"
+ "net/http"
+ "path"
+ "strings"
+
+ "golang.org/x/net/html"
)
type SetIdentifier int
@@ -43,7 +48,7 @@ func (si SetIdentifier) String() string {
return ""
}
-var SetIdentifiers = struct {
+var Sets = struct {
Base SetIdentifier
Magic SetIdentifier
Equipments SetIdentifier
@@ -65,7 +70,7 @@ var SetIdentifiers = struct {
Exp1: Exp1,
}
-var SetIdentifierNames = map[string]SetIdentifier{
+var SetNames = map[string]SetIdentifier{
"base": Base,
"magic": Magic,
"equipments": Equipments,
@@ -76,3 +81,37 @@ var SetIdentifierNames = map[string]SetIdentifier{
"tyrant": Tyrant,
"exp1": Exp1,
}
+
+func (set *SetIdentifier) CardPaths() []string {
+ url := PROTOCOL + path.Join(BASE_URL, CARD_DATA_URL, set.String())
+ log.Printf("loading %s\n", url)
+ resp, err := http.Get(url)
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ defer resp.Body.Close()
+
+ doc, err := html.Parse(resp.Body)
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ paths := []string{}
+ var walk func(*html.Node)
+ walk = func(n *html.Node) {
+ if n.Type == html.ElementNode && n.Data == "a" {
+ for _, a := range n.Attr {
+ if a.Key == "href" {
+ paths = append(paths, path.Join(set.String(), strings.TrimSuffix(a.Val, ".yml")))
+ break
+ }
+ }
+ }
+ for c := n.FirstChild; c != nil; c = c.NextSibling {
+ walk(c)
+ }
+ }
+ walk(doc)
+ return paths
+}